首页 > 解决方案 > cpu-bound 线程是否总是在 Python 中重新获取 GIL?

问题描述

我正在浏览 David Beazley 的 GIL 相关幻灯片,试图了解导致 Python 中线程切换的原因。然而,很多事情都在我头上。

http://www.dabeaz.com/python/UnderstandingGIL.pdf

似乎在 100 次左右之后,当前线程释放了 GIL,如果它是 CPU Bound 会重新获取它?

另一方面,如果它处于休眠状态或受 I/O 约束,则另一个线程将获取 GIL。

因此,如果一个线程受 CPU 限制,它将继续重新获取,直到完成任务?

标签: pythonmultithreadinggil

解决方案


它将尝试重新获取 GIL,直到完成,或者在 I/O 或类似处暂停。但是,如果程序中还有其他 CPU 绑定,它们也会尝试获取 GIL,因此每当 GIL 被释放时,都需要进行仲裁,以决定允许谁获取它。

但是如果没有其他线程准备好运行(例如所有其他线程都在等待 I/O),那么正在运行的线程每次都会获得锁。但是对于释放-重新获取舞蹈,每 100 个滴答声仍然会有开销。


推荐阅读