我正在创建一个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限制任务设计的,将它用于其他任何可能都不太理想......尽管它当然对你来说可能已经足够了。 –