在进入正题之前,我们先说一下并行和并发的区别:
并发(感觉是同时): 同一刻快速交替执行多个任务
并行(真的同时): 同一刻真正同时执行多个任务
一,进程
进程有三大步骤,分别是:《1》导包: importmultiprocessing
《2》创建进程: 进程对象名 = multiprocessing.Process(target=任务名)
《3》启动进程:进程对象名.start()
创建进程中的几个参数解释:《1》args: 以元组的形式传递参数, 注意: 如果只有1个参数加逗号
《2》kwargs: 以字典形式传递参数, 注意: 字典的key必须和任务中形参名一致
《3》name: 默认进程名称是Process-1,Process-2...,也可以直接指定
《4》target: 指定携带任务的函数名, 注意: 没有括号
二,线程
线程有三大步骤,分别是:《1》导包: importthreading
《2》创建线程: 进程对象名 = multiprocessing.Thread(target=任务名)
《3》启动线程:线程对象名.start()
创建线程中的几个参数解释:《1》args: 以元组的形式传递参数, 注意: 如果只有1个参数加逗号
《2》kwargs: 以字典形式传递参数, 注意: 字典的key必须和任务中形参名一致
《3》name: 默认线程名称是Thread-1,Thread-2...,也可以直接指定
《4》target: 指定携带任务的函数名, 注意: 没有括号
三,进程和线程
区别:
《1》进程之间不共享全局变量
《2》线程之间共享全局变量
《3》 创建进程的资源开销要比创建线程的资源开销要大
《4》进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位
关系:
《1》线程是依附在进程里面的,没有进程就没有线程。
《2》 一个进程默认提供一条线程,进程可以创建多个线程。
四.协程
python中的协程是从生成器发展来的
协程的三要素:async def 定义函数
await 指定等待处
asyncio.run()
注:最后提示一下,我们python中的生成器推导式:(i for i in range(x))
生成器函数就是在函数内使用了yield关键字
综上,我们如何选择进程线程协程呢?如果是CPU密集型主要是数学计算我们使用进程;如果是简单的后台任务,简单易用我们用线程;如果是I/O密集型,主要是网络请求或者文件读写,我们用协程。一句话总结,进程真正同时做事,线程看起来同时做事,协程单线程内切换做事。