我有一個項目列表,我需要在不同的時間間隔更新。該列表可以增長到數千個項目。每個項目可能有不同的時間間隔。如果我爲每個項目創建一個計時器,我是否會用線程飽和系統?我認爲最好創建一個等於項目集中最小間隔的計時器,然後在每次更新時增加一個計數器,然後檢查計數器現在是否等於任何其他間隔。如果最小間隔是所有其他間隔的倍數,這應該工作。有什麼建議麼?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定時器的線程安全工作
- 6. 在Windows DLL中使用boost :: asio :: deadline_timer時出現死鎖
- 7. 每個線程使用一個定時器Qt
- 8. boost deadline_timer不等待
- 9. boost :: asio :: deadline_timer續訂仍然會調用處理程序函數
- 10. 從boost :: threads到boost :: asio定時器
- 11. boost deadline_timer issue
- 12. jmx是否爲每個調用創建一個新線程?
- 13. tomcat是否爲每個用戶創建一個線程?
- 14. boost :: asio使用工作線程的多個傳出SSL連接
- 15. Boost Asio單線程性能
- 16. boost :: asio,線程和同步
- 17. boost :: asio內部線程
- 18. 是否有一個用於boost :: asio的UDT後端?
- 19. 使用boost的延遲操作:: deadline_timer
- 20. Boost asio - 多個streambufs或每個連接一個?
- 21. boost :: asio :: io_service檢查是否爲空
- 22. 當我使用boost :: asio :: async_write發送一些大數據時,使用boost :: asio :: async_write
- 23. 嘗試使用deadline_timer添加超時read_until
- 24. 使用boost asio指定ip和port創建一個iostream
- 25. boost :: asio :: strand && boost :: lockfree :: spsc_queue
- 26. boost :: asio :: deadline_timer在async_read()和async_write()在定時器處理程序中完成後不會終止
- 27. 使用boost :: asio監聽兩個socket
- 28. boost :: asio :: async_read和boost :: asio :: streambuf
- 29. C++ boost:如何實現每個線程的會話
- 30. 是否有一個ExecutorService爲每個任務創建一個新的線程?
好吧,但你說它會派遣其工作在「一個或多個」線程。默認情況下,如果我創建一個綁定到一個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