python随笔系列--多进程多线程并发度初探

大家都知道python中由于GIL这把大锁的存在,导致python的多线程并不是真正的多线程(不同于java等语言)。首先了解下GIL导致的现象:同一时间只能有一个线程占有python解释器(或者,同一时刻只有一个线程对共享资源进行存取);而多进程不受GIL的影响是因为:每个 fork 的进程有一个单独的 GIL。关于GIL的详细内容请自行延申推荐参考

接下来用一个如下的函数(纯计算,不涉及I/O)放到死循环里对多线程和多进程能使用多少从cpu做测试
python随笔系列--多进程多线程并发度初探
测试机cpu正常情况如下
python随笔系列--多进程多线程并发度初探

先看不用进程/线程模式:

python随笔系列--多进程多线程并发度初探
cpu使用情况如下
python随笔系列--多进程多线程并发度初探

多线程模式:

python随笔系列--多进程多线程并发度初探
cpu使用情况如下
python随笔系列--多进程多线程并发度初探

多进程模式:

python随笔系列--多进程多线程并发度初探
cpu使用情况如下
python随笔系列--多进程多线程并发度初探
可以看到python中CPU密集的任务,应该优先使用多进程模型;不过对于I/O密集型任务,多线程每个线程遇到I/O操作时,会让出python解释器,从而实现I/O等待这个环节的并发,亦可以实现 出比穿行快得多的程序,而且比多进程更轻量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章