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 控制修改。