上一篇直通车 Python 并发编程系列–1、浅谈GIL历史及对多线程的影响
前言
前面说了下GIL的历史,现在站在接受GIL的角度谈何时选择多线程、何时选择多进程的问题(不接受GIL那你用Jython呐2333)。
选择因素1–问题类型
简单的说,就是看你要解决问题属于什么类型。这块大体上分为两类–CPU密集型和I/O密集型,换句话说就是偏重于计算还是侧重输入输出。例如要进行科学计算,计算量很大,那就属于CPU密集型,因为对CPU的需求占据了主体。再比如写一个爬虫程序,其中大部分时间都花在从服务器读取数据的过程中,显然是I/O密集型。
选择因素2–多线程和多进程性能比对
关于性能比对,网上有很多比对多线程和多进程速度的例子,这里就不重复造轮子了。下面给出几个相关的链接,可以参考一下他们的测试结果。
这里直接给出多线程和多进程的对比结果:
- 对于CPU密集型,效率关系:多进程>单进程(单线程)>多线程
- 对于I/O密集型,效率关系:多线程>多进程>单进程(单线程)
总结
从以上结果不难看出,对于规模较大的问题,单进程(单线程)处理起来性能无法满足需要时就需要考虑并发了。CPU密集型的任务,用多进程;I/O密集型的任务,用多线程。下一篇直通车 Python 并发编程系列–3、多线程编程方法