python - cpu-bound 线程是否总是在 Python 中重新获取 GIL?
问题描述
我正在浏览 David Beazley 的 GIL 相关幻灯片,试图了解导致 Python 中线程切换的原因。然而,很多事情都在我头上。
http://www.dabeaz.com/python/UnderstandingGIL.pdf
似乎在 100 次左右之后,当前线程释放了 GIL,如果它是 CPU Bound 会重新获取它?
另一方面,如果它处于休眠状态或受 I/O 约束,则另一个线程将获取 GIL。
因此,如果一个线程受 CPU 限制,它将继续重新获取,直到完成任务?
解决方案
它将尝试重新获取 GIL,直到完成,或者在 I/O 或类似处暂停。但是,如果程序中还有其他 CPU 绑定,它们也会尝试获取 GIL,因此每当 GIL 被释放时,都需要进行仲裁,以决定允许谁获取它。
但是如果没有其他线程准备好运行(例如所有其他线程都在等待 I/O),那么正在运行的线程每次都会获得锁。但是对于释放-重新获取舞蹈,每 100 个滴答声仍然会有开销。
推荐阅读
- django - Django,如何使用CreateView和UpdateView同时添加两条记录
- sorting - 仅某些节点的 XML 排序列表
- r - 如何在 R 中的脚本之间共享数据帧
- c++ - 交替运行线程+等待多个线程
- javascript - 用于切换部门可见性的 Js 脚本不起作用
- 3d - gnuplot、splot、3d:不能将屏幕或角色坐标与绘图坐标混合
- android - 使用 Android 导航组件的身份验证流程
- c# - Foreach 循环,确定哪个是循环的最后一次迭代 - DataRow
- angular - 如何获取 Mat-Table 的实例,如果我们在组件中有多个表
- c++ - Java 的 EnumSet.allOf() 的 C++ 等价物是什么?