一、进程 线程 协程
1.进程
一个运行的程序就是一个进程,没有运行的代码叫做程序。进程是系统分配资源的最小单位,进程拥有自己独立的内存空间 相对独立,所以进程间的数据不共享,开销大。
2.线程
CPU调度执行的最小单元(程序真正执行的时候调用的是线程),也叫执行路径,依赖于进程存在,一个进程最少存在一个线程,叫做主线程而多个线程共享进程内存资源(数据共享,共享全局变量),从而极大地提高了程序的运行效率。
一个进程中可以有一个或多个线程。一个线程只属于一个进程。
一个进程中的多个线程是一种竞争关系。
3.协程
协程类似于线程,基于线程,但是协程允许一个执行过程A中断,转而执行过程B,然后再执行过程A
优势:
协程理论上数量有无限个, 没有线程之间的切换动作,所以比较快;
没有锁机制, 因为所有协程都在一个线程中.
是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
二、多进程 多线程
1.多进程
(并行:两个人每个人同时处理一个任务)
多进程模块:multiprocessing ,CPU密集型、IO计算型可以使用多进程
模块导入:from multiprocessing import Process
Process创建进程
Process([group [, target [, name [, args [, kwargs]]]]])
常用方法:
一个进程的,生命周期中的几种状态:
出生:
就绪:start()
执行:
阻塞:sleep() / IO操作
死亡:正常结束 / 异常结束
import timefrom multiprocessing import Processdef download1(name):for i in range(1, 6):print(f{name}下载进度:{i * 20}%)time.sleep(1)def download2(name):for i in range(1, 6):print(f{name}下载进度:{i * 20}%)time.sleep(1)if __name__