全 局 解 释 锁
1⃣️ 对对象引用计数和解释器其他内部状态的访问受一个锁的控制,这个锁是“全局解释器锁”(Global Interpreter Lock,GIL)。任意时间点上只有一个Python线程可以持有GIL。这意味着,任意时间点上只有一个线程能执行Python代码,与CPU核数量无关。 2⃣️为了防止一个Python线程无限期持有GIL,Python的字节码解释器默认每5毫秒暂停当前Python 线程,释放GIL。被暂停的线程可以再次尝试获得GIL,但是如果有其他线程等待,那么操作系统调度程序可能会从中挑选一个线程开展工作。 3⃣️我们编写的Python代码无法控制GIL。但是,耗时的任务可由内置函数或C语言(以及其他能在Python//CAPI层级接合的语言)扩展释放GIL。 4⃣️Python 标准库中发起系统调用'的函数均可释放GIL。这包括所有执行磁盘IO、网络的函数,以及time.sleep()。NumPy/SciPy库中很多CpU密集型函数,以及zLib和bz2模块中执行压缩和解压操作的函数,也都释放GIL。 引自 19.3 术语定义 539
57人阅读
眯眼西索对本书的所有笔记 · · · · · ·
-
那为何还有继承?
起初,我们推动继承思想是为了让新手顺利使用只能由专家设计的框架开发作品。
-
并发与并行
并发指同时处理多件事。 并行指同时做多件事。 二者不同,但有联系。 一个关于结构,一个关于...
-
全 局 解 释 锁
-
克制对Web-Scale对高性能的渴望
我们看到许多团队因为选择了复杂的工具、框架或架构而遇到麻烦,因为他们觉得“可能需要伸缩...
-
性能计数器
t0=time.perf_counter() result=func(*args) elapsed=time.perf_counter()-t0
> 查看全部17篇
说明 · · · · · ·
表示其中内容是对原文的摘抄