Boost协程是否比Boost.Asio的异步操作更快?或者在什么情况下协程可以更快?

时间:2019-11-15 06:41:39

标签: c++ optimization boost boost-asio boost-coroutine

就我而言,我有一台服务器,可以处理大量的Sip呼叫(同时进行3000个)。它发送和接收SIP数据包以及大量RTP数据包(每20毫秒一个数据包)。

现在,一切都通过Boost.Asio与回调异步工作。

我现在面临优化问题。已经做了一些使它工作更快的事情(例如,从动态分配过渡到池分配,更改获取时间的方法等),但是加速是中等的。

函数分析器在顶部显示了大量的mutex_locks,因此我认为它与所有这些异步调用有关。浏览网络时,我发现协程可以作为回调的替代方法。 据我了解,它们使代码看起来更有吸引力,更简单,同时仍保持异步特性。

但是它的性能如何?协程会比异步调用和回调更快(至少就我而言)?

这是分析器的屏幕截图: Profiler output

1 个答案:

答案 0 :(得分:1)

协程并不比异步调用快,因为它们对于Asio来说是相同的。

主要区别在于编写组合操作的方式:使用coros,您将获得隐式coro堆栈作为“ closure”,否则,您将使用make类来执行此操作。 (取决于操作的方式,协程可能的执行效率更高,但是它们都不是您所描述的瓶颈)