你们都知道python中因为GIL这把大锁的存在,致使python的多线程并非真正的多线程(不一样于java等语言)。首先了解下GIL致使的现象:同一时间只能有一个线程占有python解释器(或者,同一时刻只有一个线程对共享资源进行存取);而多进程不受GIL的影响是由于:每一个 fork 的进程有一个单独的 GIL。关于GIL的详细内容请自行延申推荐参考。java
接下来用一个以下的函数(纯计算,不涉及I/O)放到死循环里对多线程和多进程能使用多少从cpu作测试
测试机cpu正常状况以下python
cpu使用状况以下多线程
cpu使用状况以下并发
cpu使用状况以下
能够看到python中CPU密集的任务,应该优先使用多进程模型;不过对于I/O密集型任务,多线程每一个线程遇到I/O操做时,会让出python解释器,从而实现I/O等待这个环节的并发,亦能够实现 出比穿行快得多的程序,并且比多进程更轻量。ide