如果我在一個python條件變量上調用wait()
,那麼調用線程會暫停執行並返回yield嗎?還是一直保持阻塞狀態直到下一個上下文切換?Python threading.Condition.wait()是否立即掛起執行?
回答
線程確實屈服。這個收益是由於執行pthread_cond_wait
或PyThread_acquire_lock
中的等效掛起機制。由於條件變量是使用系統調用接口實現的,並且Python使用本地線程,操作系統調度程序負責切換到另一個線程。
此外,GIL is released之前調用這個深入Python的內部。最後,最後一塊難題是獲取threading.Condition.wait
鎖的電話。
等待()方法釋放鎖,然後阻塞,直到它是 通過通知()或notifyAll的()調用在另一個線程相同的條件下 變量喚醒。一旦被喚醒,它將重新獲得鎖定並返回 。也可以指定超時。
它阻塞,直到通知條件。
相信與否我實際上是先試着閱讀手冊。如果它「阻止」執行,爲什麼我不應該使用自旋鎖? –
等待在自旋鎖上的線程會燒燬cpu,而等待條件的線程不會燒燬cpu。旋轉鎖適用於快速鎖定和釋放鎖的情況。條件對於我們不知道等待多久的情況很有用。 –
行,換句話說,線程產量? –
- 1. Erlide立即掛起
- 2. 是否立即執行SQL語句?
- 3. 立即執行
- 4. 執行hsqldb立即執行
- 5. ExecuteStreamCommand掛起執行Shell腳本(即執行蜂房)
- 6. 立即執行Oracle
- 7. 立即執行DBMS_OUTPUT.PUT_LINE
- 8. Python可執行文件立即關閉
- 9. ExecuteScalarAsync掛起,但ExecuteScalar立即返回
- 10. 延遲作業總是立即執行
- 11. 腳本不執行,而是掛起
- 12. PostScript立即執行或延期執行
- 13. PL/SQL DDL執行立即執行
- 14. C#移動操作掛起,而不是立即拋出異常
- 15. 執行docker exec命令時執行python腳本掛起
- 16. Dapper的IEnumerable <T>是否延期或立即執行?
- 17. 是否可以立即從IDE執行REPAST模型
- 18. 是否需要PL SQL查詢[執行立即]
- 19. performSegueWithIdentifier不會立即執行
- 20. 「mongod」執行立即終止
- 21. 立即執行多個shell_exec?
- 22. 立即執行DDL語句
- 23. 立即執行語句
- 24. Dispatcher.beginInvoke不立即執行
- 25. 立即執行ORA-00900
- 26. 執行立即在oracle中
- 27. jquery有.on()立即執行
- 28. 立即執行setTimeout回調
- 29. 立即執行作業
- 30. InnerHTML何時立即執行?
我想說這取決於實施。奇怪的CPython線程可能不會,但這只是一個模糊記憶的猜測。 –