我有一個項目列表,我需要在不同的時間間隔更新。該列表可以增長到數千個項目。每個項目可能有不同的時間間隔。如果我爲每個項目創建一個計時器,我是否會用線程飽和系統?我認爲最好創建一個等於項目集中最小間隔的計時器,然後在每次更新時增加一個計數器,然後檢查計數器現在是否等於任何其他間隔。如果最小間隔是所有其他間隔的倍數,這應該工作。有什麼建議麼?boost :: asio :: deadline_timer是否爲每個定時器使用一個線程?
9
A
回答
12
Boost不使用每個定時器的線程,它保留一個定時器隊列。每個計時器都是用實際工作的boost::asio::io_service
對象創建的。
該對象可以在一個或多個線程when you run boost::asio::io_service::run()
explicitly from multiple threads中調度其工作,但定時器和線程之間不存在一對一的對應關係,而且Asio不會在後面創建線程。
1
Recent versions Asio,Boost 1.43和更高版本,在Linux上使用timerfd_create(2)
API for deadline_timer
s。
更改爲使用timerfd在Linux上調度定時器,當時 可用。
相關問題
- 1. 在線程內使用boost :: asio :: deadline_timer
- 2. boost asio deadline_timer
- 3. 使用許多boost :: asio :: deadline_timer
- 4. boost :: asio :: deadline_timer線程安全嗎?
- 5. Boost asio :: deadline_timer在超時前重置
- 6. 使用boost :: asio定時器的線程安全工作
- 7. 在Windows DLL中使用boost :: asio :: deadline_timer時出現死鎖
- 8. boost deadline_timer不等待
- 9. boost :: asio :: deadline_timer不會調用處理程序
- 10. boost :: asio :: deadline_timer續訂仍然會調用處理程序函數
- 11. 來自升壓的多個async_wait asio deadline_timer
- 12. 每個線程使用一個定時器Qt
- 13. 我們需要每個線程多爲io_service對象線程的boost :: ASIO服務器與單個受體
- 14. 從boost :: threads到boost :: asio定時器
- 15. boost deadline_timer issue
- 16. 從線程池中調用時,boost的io_service共享線程是否爲請求?
- 17. tomcat是否爲每個用戶創建一個線程?
- 18. jmx是否爲每個調用創建一個新線程?
- 19. boost :: asio使用工作線程的多個傳出SSL連接
- 20. 使用boost的延遲操作:: deadline_timer
- 21. boost :: asio,線程和同步
- 22. Boost Asio單線程性能
- 23. boost :: asio內部線程
- 24. C++使用一個線程定時器
- 25. 是否有一個用於boost :: asio的UDT後端?
- 26. boost deadline_timer沒有啓動
- 27. 在boost線程中運行boost asio io_service
- 28. boost :: asio,線程池和線程監視
- 29. Boost asio - 多個streambufs或每個連接一個?
- 30. 超時後何處銷燬線程和deadline_timer對象?
好吧,但你說它會派遣其工作在「一個或多個」線程。默認情況下,如果我創建一個綁定到一個io_service的千位定時器,並且從一個線程調用io_service上的所有這些定時器,將會在一個新線程上執行?顯然,當你調用timer :: async_wait時,它們不會在調用線程上執行,對吧? 另外,儘管有這種能力,但是我所說的設計似乎更適合創建多個定時器嗎?或者我本質上是重複計時器呢? – Rhubarb 2010-03-09 02:00:25
(1)是的,如果從線程A運行IO服務,則所有定時器處理程序都將在線程A上運行。(2)創建多個定時器是首選,因爲它比易於計算的最短維護更容易且更容易出錯間隔爲一個計時器(您將有1對1關係b/w工作項目和計時器)。 – 2010-03-09 02:06:18
PS是的,你會複製Asio已經爲你做的工作(跟蹤最早的到期計時器)。 – 2010-03-09 02:14:58