阻塞性I/O和GIL
作者:互联网
CPython解释器本身就不是线程安全的,因此有全局解释器锁(GIL),一次只允许一个线程执行Python字节码。因此,一个Python进程通常不能同时使用多个CPU核心。
编写Python代码时无法控制GIL;不过,执行耗时任务时,可以使用一个内置的函数或一个C语言编写的扩展释放GIL。其实,有个使用C语言编写的Python库能管理GIL,自行启动操作系统线程,利用全部可用的CPU核心。这样做会极大地增加库代码的复杂度,因此大多数库的作者都不这么做。
然而,标准库中所有执行阻塞型I/O操作的函数,在等待操作系统返回结果时都会释放GIL。这意味着在Python语言这个层次上可以使用多线程,而I/O密集型Python程序能从中受益:一个Python线程等待网络响应时,阻塞性I/O会释放GIL,再运行一个线程。
因此David Beazley才说,“Python线程毫无作用”。
标签:Python,阻塞性,C语言,线程,编写,GIL,CPU 来源: https://www.cnblogs.com/lc0811/p/16302051.html