Python多线程和GIL锁

一曲冷凌霜 提交于 2020-01-20 03:10:07

Python 有GIL锁,所以它的多线程实际上是单线程

GIL 全称全局解释器锁(Global Interpreter Lock), 它锁的解释器,而不是Python代码,它防止多线程同时执行Python的字节码, 防止多线程同时访问Python的对象

Python的解释器通过切换线程的方式来模拟多线程并发的情况
那岂不是说Python多线程不会提高效率了???

非也!!!

对于IO密集型工作,多线程可以大幅度提高效率,而对于CPU密集型工作,多线程是没用的.

  • IO密集型
    涉及到网络,磁盘IO,硬盘读写等都是IO密集型工作,这类任务对CPU的消耗较少,大部分时间不是花在代码上,而是其他操作上
  • CPU密集型
    特点是进行大量的计算,消耗CPU资源, 比如我们常见的排序算法,对视频的解码之类的,大部分时间花在代码上

最后:

  • CPU密集型程序适合用C等编译型语言开发的多线程, 而IO密集型程序适合Python等脚本语言开发的多线程
  • 在使用多线程的时候,多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁,类似于协程.
  • 在处理像科学计算 这类需要持续使用cpu的任务的时候 单线程会比多线程快
  • 在 处理像IO操作等可能引起阻塞的这类任务的时候 多线程会比单线程
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!