Python GIL 算法说明
本文用代码说话,说明了 GIL 是怎么运行在 Python 解释器中的。简单来说,解释器做了这么几件事情:
bytecode = compile(function)
while True:
drop_GIL
take_GIL
execute_opcode(bytecode.next_intruction())
如果你在写多线程应用,那么这个 GIL 会把所有其他的线程都 hang 住,不执行 execute_opcode。即:任一时刻,不管有多少线程,Python 总是只有一个 thread 执行 opcodes,其他的就傻等着。
几个核心概念:
- GIL: 它是一个布尔值(锁)
- GIL 的修改有 gil_mutex 控制访问,有 gil_cond 控制修改。