我正在創建一個futures_cpupool::CpuPool
,其中每個線程都需要打開數據庫連接,這是一個昂貴的初始化。這些初始化的狀態需要在作業之間保持持續,因爲它們需要很長時間才能建立。數據庫連接對於工作線程來完成他們的工作是必需的。如何保存「CpuPool」工作線程的狀態?
回答
免責聲明:有可能是一個更好的解決方案充分利用一些CpuPool
API,也許...
簡單的解決辦法是使用一個單獨的ConnectionPool
,與Arc
共享。
然後,你只需當你啓動一個線程,並要求他們獲得從那裏連接交給ConnectionPool
參考。
池本身將負責:
- 準備新的連接(執行初始化工作),
- 回收用過的連接,以便提出進一步的要求得到滿足更快。
如果連接參數發生變化(例如,指定不同的區域設置),這裏有一點困難。我建議每個客戶都被交給一個「新鮮」的連接,所有的設置都被標準化爲一個已知的值。
還有什麼時候(和在哪個線程上)執行初始化和回收工作的設計選擇;我建議你從最簡單的解決方案:
- 初始化點播,
- 回收時立即移交。
ConnectionPool在哪個箱子裏?這也不是一個理想的解決方案,因爲不能保證一個線程總是獲得相同的連接。這是更好的行爲,因爲不需要「發送」並具有稍好的NUMA行爲。 – njaard
@njaard:這不是箱子,你必須自己寫。如果您認爲它很重要,歡迎您推薦線程親和力,但老實說,在數據庫連接中,網絡部分與CPU /內存相比非常緩慢,我甚至不會打擾。 –
- 1. 如何保存當前工作狀態?
- 2. 多線程工作線程狀態
- 3. 保存狀態的Android不工作
- 4. Eclipse保存工作臺狀態
- 5. Office Communicator存在狀態如何工作?
- 6. 帶工作線程的線程狀態信號
- 7. Jython保存程序狀態
- 8. 如何保存動態viewpager中保存的視圖狀態
- 9. 保存狀態
- 10. Clojure狀態如何工作?
- 11. 如何保存我的活動狀態?
- 12. 如何保存ImageButton的狀態
- 13. 如何保存視圖類的狀態?
- 14. 如何保存UIViewController的狀態?
- 15. 如何保存NSPopUpButton的狀態? - 可可
- 16. 如何保存UIScrollView的狀態?
- 17. 如何保存UIImage或UIImageView的狀態?
- 18. 如何保存html頁面的狀態?
- 19. 如何保留並稍後恢復線程的執行狀態?
- 20. 如何獲得線程的狀態?
- 21. 如何檢查Linux線程的狀態?
- 22. 如果工作線程返回未處理狀態,則繼續主線程
- 23. 保存CheckedTextView狀態
- 24. 保存android.app.Application狀態
- 25. RecyclerView保存狀態
- 26. Android - 保存狀態的複選框不工作sharedpreferences
- 27. 我如何保存JCheckBox狀態
- 28. 如何保存單選按鈕狀態
- 29. 如何保存開關狀態?
- 30. Android:如何不保存實例狀態?
注意:''CpuPool'專門用於激烈的CPU工作,最主要的原因是它阻塞整個線程,因此,不建議在上述工作期間使用網絡連接。 –
我不明白爲什麼它會阻止整個線程@MatthieuM。 – njaard
如果您有長期存在的事務,這是一個可伸縮性問題:您需要更多的線程。 CpuPool是爲CPU限制任務設計的,將它用於其他任何可能都不太理想......儘管它當然對你來說可能已經足夠了。 –