我们通常使用的python解释器均为CPython,当年python的创始人在设计这门语言时,在解释器中加入了一个叫做“全局解释器锁”(global interpreter lock)的东西。因为GIL的存在,python在运行多线程程序时并不是真正意义上的多线程。
CPython解释器在执行代码时,每一个python线程执行前都必须获得GIL锁,然后每执行一段时间,解释器会自动释放GIL锁,让别的线程有机会执行。因此,多线程在python中并不是并行执行,而是交替执行的,每个时刻仅有获取GIL锁的线程在执行。即便你的电脑有4核,有4个线程,也只会用到1个核来执行。
GIL是加在每个进程上的,如果我们想在python程序中利用多核,可以采用多进程的方法。
在处理计算密集型的任务时,你会发现在python中串行的执行效率要高于并行。对于某些计算密集型任务,不推荐使用python语言去处理。python更擅长处理IO密集型任务。