简单解释
Python中的多线程是单CPU意义上的多线程,它和多CPU上的多线程有着本质的区别,这是因为Python中存在着一个叫Global Interpreter Lock(GIL)全局解释器锁。
在解释器执行任何Python代码时,都需要先获取这把锁,即,同一时刻内只有一条线程可以在CPU中运行。但Python多线程并不是毫无用处,在IO操作时会释放这把GIL锁,在IO密集型程序中,一个线程处于IO等待的时候,另一个线程便可以获得锁并在CPU中运行。
但如果是纯计算的程序,没有IO操作,则只有取得GIL的线程可以在CPU中运行,其他线程都处于等待状态,相当于单线程在跑,并且上下文切换还会有所开销。
详细说明
先明确一个问题,Python中的多线程是假的多线程!
为什么这么说,我们先明确一个概念,全局解释器锁(GIL)。
Python代码的执行由Python虚拟机(解释器)来控制。Python在设计之初就考虑要在主循环中,同时只有一个线程在执行,就像单CPU的系统中运行多个进程那样,内存中可以存放多个程序,但任意时刻,只有一个程序在CPU中运行。
同样地,虽然Python解释器可以运行多个线程,只有一个线程在解释器中运行。对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同时只有一个线