当有很多计算和推送/弹出线程安全容器时,是否可以从boost asio更好地同步或异步?

时间:2014-05-02 23:10:06

标签: c++ c++11 boost boost-asio

需要boost::asio的建议,因为我是全新的并且很快就会有截止日期,我需要创建一个TCP服务器(很多连接),我使用文档中的chat server example作为起点。

当我收到一条消息时,我有很多计算结果,我需要推入线程安全队列(lock guard mutex)。除了写入和读取外,所有内容都计算在主线程中(回调执行的地方?)。为了这个目的,我是否需要与许多线程同步或者是否有任何规则如何更快地进行大量计算的异步?

(我可以把计算放在新的异步中,但我想知道是否有更好的解决方案)

1 个答案:

答案 0 :(得分:1)

只需在一个线程上异步处理通信。这应该允许每秒最多~10k连接。只是在此主题上执行任何缓慢的操作。只需按下队列并进入通信服务即可。

现在,启动尽可能多的线程,可以有效地进行CPU密集型工作(通常是#of logical core,但有时是#physical core,当然如果你正在使通信吞吐量饱和(不太可能),可能(#cores - 1))

如果您预计IO端将饱和并且您甚至无法阻止互斥锁,请使用无锁队列。在这种情况下,肯定是维度(#cores -1)工作者,因为工作人员会自然地在一个紧密的循环中旋转,等待队列中的消息,如果你不采取行动,就会使IO线程窒息的预防措施。