如果我啓動一個System.Threading.Timer,它是否在等待(壞)時消耗一個ThreadPool線程,或者只有當定時器正在執行TimerCallback時才消耗?System.Threading.Timer在等待時消耗一個線程嗎?
1
A
回答
2
只有當回調正在執行。請注意,如果回調的持續時間長於定時器間隔,則多個線程池線程將最終同時執行回調。
3
是的。和不。這取決於你的.NET框架版本。傳統上不是,它消耗了整個線程。由CLR開始處理所有活動計時器。
並非如此,更新的版本,如我的4.5.1在Windows 8.1上運行。它已切換到使用CreateTimerQueueTimer完成該任務。這是由操作系統彙集的。
通過啓用非託管調試並設置定時器回調的斷點來獲得洞察。看看調用堆棧。
相關問題
- 1. 等待線程資源消耗
- 2. ManualResetEvent在處於等待狀態時會消耗CPU嗎?
- 3. 等待另一個線程
- 4. 條件等待線程消耗太多的CPU週期
- 5. 當前線程在等待另一個線程時睡眠
- 6. 幾個線程可能在同一個對象上等待嗎?
- 7. 爪哇等待在另一個線程
- 8. 多個線程可以一次等待一個對象嗎?
- 9. 在Scala Future塊線程上等待嗎?
- 10. c#多個線程等待一個ManualResetEvent
- 11. C++線程等待時間
- 12. 等待線程
- 13. 如何讓一個線程等待另一個線程?
- 14. 多個線程等待NetworkStream.Read
- 15. asp.net(mvc)在使用async/await等待聊天消息時不消耗任何線程?
- 16. 等待事件提升線程取消
- 17. 異步等待一個線程完成
- 18. 異步/等待另一個線程ID
- 19. 如何等待一個線程完成
- 20. IllegalMonitorStateException當試圖等待()一個線程
- 21. 等待多個線程(POSIX線程,C++)
- 22. 如果一個線程正在console.readline上等待線程暫停?
- 23. 線程正在等待另一個線程
- 24. Python線程卡在另一個線程等待用戶輸入
- 25. 多線程 - 等待線程
- 26. System.Threading.Timer與異步/等待重複卡住
- 27. Delphi線程 - 在等待時凍結
- 28. 在更新Swing時等待線程
- 29. 在退出程序之前等待System.Threading.Timer回調完成
- 30. 如何讓1個UI線程等待另一個UI線程
因此在早期版本中,單個「管理」線程是一個ThreadPool線程,而在當前版本中,它是彙集在線程池之外的。如果你有幾百個定時器在運行,我更擔心會發生什麼。 –
不,這是一個真正的線程。不,沒有必要擔心數百個定時器。該方案很簡單,只需要一個線程來處理任意數量的定時器。成千上萬沒事。它所要做的就是等待即將到期的* first *計時器。一旦滴答,或另一個計時器被添加或更改,所需要的就是找到下一個計劃。十分簡單。 –
這是我的想法,但我想確認....謝謝。 –