就我而言,我有一台服务器,可以处理大量的Sip呼叫(同时进行3000个)。它发送和接收SIP数据包以及大量RTP数据包(每20毫秒一个数据包)。
现在,一切都通过Boost.Asio与回调异步工作。
我现在面临优化问题。已经做了一些使它工作更快的事情(例如,从动态分配过渡到池分配,更改获取时间的方法等),但是加速是中等的。
函数分析器在顶部显示了大量的mutex_locks,因此我认为它与所有这些异步调用有关。浏览网络时,我发现协程可以作为回调的替代方法。 据我了解,它们使代码看起来更有吸引力,更简单,同时仍保持异步特性。
但是它的性能如何?协程会比异步调用和回调更快(至少就我而言)?
这是分析器的屏幕截图: Profiler output
答案 0 :(得分:1)
协程并不比异步调用快,因为它们对于Asio来说是相同的。
主要区别在于编写组合操作的方式:使用coros,您将获得隐式coro堆栈作为“ closure”,否则,您将使用make类来执行此操作。 (取决于操作的方式,协程可能的执行效率更高,但是它们都不是您所描述的瓶颈)