孤叶翔云

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

我们通常使用的python解释器均为CPython,当年python的创始人在设计这门语言时,在解释器中加入了一个叫做“全局解释器锁”(global interpreter lock)的东西。因为GIL的存在,python在运行多线程程序时并不是真正意义上的多线程。

CPython解释器在执行代码时,每一个python线程执行前都必须获得GIL锁,然后每执行一段时间,解释器会自动释放GIL锁,让别的线程有机会执行。因此,多线程在python中并不是并行执行,而是交替执行的,每个时刻仅有获取GIL锁的线程在执行。即便你的电脑有4核,有4个线程,也只会用到1个核来执行。

GIL是加在每个进程上的,如果我们想在python程序中利用多核,可以采用多进程的方法。

在处理计算密集型的任务时,你会发现在python中串行的执行效率要高于并行。对于某些计算密集型任务,不推荐使用python语言去处理。python更擅长处理IO密集型任务。

 

posted on 2019-03-23 11:09  孤叶翔云  阅读(223)  评论(0编辑  收藏  举报