【发布时间】:2014-05-25 12:12:07
【问题描述】:
我的理解是,由于 cPython 中的全局解释器锁,任何时候都只能执行一个线程。这是否会自动防止竞争条件(例如丢失更新问题)?
为了清楚起见,我是从理论的角度来问的。如果没有同步,我永远不会编写线程代码。
【问题讨论】:
-
只有一个线程可以执行python字节码。你不应该依赖这个并假设竞争条件是不可能的。
-
所以你仍然可以有一个线程交错,这会导致更新丢失?
-
当然。执行 python 指令的 2 个线程不会在不同的内核上同时执行(这就是为什么线程通常不会提高性能的原因),但它不像解释器选择一个线程来运行,直到它在执行下一个线程之前退出。那将是……疯狂。
-
虽然问题暗示与线程相关的竞争条件是讨论的范围,但它并没有在任何地方真正说明。显然,GIL 对进程间竞争条件(在不同 CPU 上运行的相同代码的两个实例等)完全没有帮助。
标签: python race-condition gil