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