python 解释器多进程/多线程 工作原理

前言

在正式讲解多进程/多线程之前,需要先了解一下python 解释器的工作流程, 及GIL全局解释器锁的工作原理

 

python解释器工作流程:

 

GIL锁:

 

IO 的本质: https://cloud.tencent.com/developer/article/1760746

 

多进程:

1、概念:进程是一个正在执行的过程或者说任务
2、多进程:为了充分地利用多核优势,使用多核CPU的资源
3、实现: multiprocessiong
4、使用场景: 计算密集任务
5、为什么要用多进程而不是多线程:
(1)当一个任务是计算密集型时, 多线程并不能提升执行效率,这与线程的工作方式有关,而多进程不同, 它可以把任务分成若干个等分,一个进程执行一部分,
并行的开始计算,执行效率当然就提升了。
6、多进程可以提升执行效率,那是不是进程越多,执行效率越快?
(1)不是, 进程需要分配一定的内存资源,同事,进程间的切换也需要消耗时间,当一个IO密集型的任务,开多进程执行,可能导致执行效率变差,还增加了内存开销
(2)只有计算密集型任务适合多进程,进程的数量根据任务计算复杂都而加减, 一个简单的计算密集型只需两个进程就能达到秒级,多开几个进程提升的效率也不会太大
(3)切记过犹不及,多开进程可能导致计算密集型转变为混合型

 

多线程:

1、概念:线程是像一条流水线工作的过程,线程依赖进程而存在,一条进程中必有一条主线程,也可以有多个子线程
2、多线程是同一进程中存在多个控制线程(如:一个生产车间[进程],有多条流水生产线[线程])
3、实现:threading
4、使用场景: IO密集
5、为什么要用线程:
(1)IO密集型任务,使用多进程只会增加资源开销,执行效率提升有限,而多线程是共享进程资源,python中当一个线程1遇到IO操作,那么它会先交出GIL执行权限
另一个线程2获得执行权限继续执行,等线程1IO结束后,再次申请GIL执行权限继续执行(此时线程2可能在IO中),这样这个IO任务就被分成很多小块,小块
并行执行来提升总的执行效率
注意:线程遇到IO,会交出GIL权限,不代表这个线程就不工作了

 

posted @ 2022-06-20 17:10  萤huo虫  阅读(182)  评论(0编辑  收藏  举报