cpu 磅的线程是否总是在 Python 中重新获得 GIRL?
Does a cpu-bound thread always reaquire the GIL in Python?
我正在浏览 David Beazley 的 GIL 相关幻灯片,试图了解导致线程切换的原因 Python。
然而,很多事情都超出了我的理解范围。
http://www.dabeaz.com/python/UnderstandingGIL.pdf
好像在100个tick左右后,当前线程释放了GIL,如果CPU绑定了会重新获取?
另一方面,如果它休眠或 I/O 绑定,则另一个线程将获取 GIL。
所以如果一个线程被 CPU 绑定,它会一直重新获取直到它完成任务?
它将尝试 重新获取 GIL,直到它完成,或者在 I/O 或类似的地方暂停。但是,如果程序中还有其他CPU绑定,他们也会尝试获取GIL,所以每当释放GIL时,都需要进行仲裁,决定谁可以得到。
但是如果没有其他线程准备好 运行(例如,所有其他线程都在等待 I/O),那么 运行ning 线程每次都会获得锁。但是每 100 ticks 仍然会有开销用于释放-重新获取舞蹈。
我正在浏览 David Beazley 的 GIL 相关幻灯片,试图了解导致线程切换的原因 Python。 然而,很多事情都超出了我的理解范围。
http://www.dabeaz.com/python/UnderstandingGIL.pdf
好像在100个tick左右后,当前线程释放了GIL,如果CPU绑定了会重新获取?
另一方面,如果它休眠或 I/O 绑定,则另一个线程将获取 GIL。
所以如果一个线程被 CPU 绑定,它会一直重新获取直到它完成任务?
它将尝试 重新获取 GIL,直到它完成,或者在 I/O 或类似的地方暂停。但是,如果程序中还有其他CPU绑定,他们也会尝试获取GIL,所以每当释放GIL时,都需要进行仲裁,决定谁可以得到。
但是如果没有其他线程准备好 运行(例如,所有其他线程都在等待 I/O),那么 运行ning 线程每次都会获得锁。但是每 100 ticks 仍然会有开销用于释放-重新获取舞蹈。