python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。
1. 进程、线程、协程之间的关系
线程是依附在进程里面的,没有进程就没有线程
一个进程至少有一个线程,进程里面可以有多个线程
一个线程里面可以有多个协程
2.进程、线程、线程的对比
进程是系统进行资源分配基本单位,每启动一个进程操作系统都需要为其分配运行资源。
线程是运行程序中的一个执行分支,是CPU调度基本单位。
进程切换需要的资源最大,效率很低
线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下)
协程切换任务资源很小,效率高
多进程、多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中 所以是并发
3. 功能对比
进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ
线程,能够完成多任务,比如 一个QQ中的多个聊天窗口
协程,能够完成多任务,但是不能完成多核CPU的充分使用
4. 区别
进程之间不共享全局变量
线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步
创建进程的资源开销要比创建线程的资源开销要大
进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
线程不能够独立执行,必须依存在进程中
多进程开发比单进程多线程开发稳定性要强
优缺点
多进程:(适用于计算密集型的多任务)
优点:可以用多核
缺点:资源开销大
多线程:(适用于IO密集型的多任务)
优点:资源开销小
缺点:不能使用多核
协程:
优点:资源开销小
缺点:是程序员自己设计的微线程,可以我们自己根据需求进行调用。