1

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

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

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

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

但是它的性能呢?协程会比异步调用和回调更快(至少在我的情况下)?

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

4

1 回答 1

2

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

主要区别在于您编写组合操作的方式:使用 coros,您可以将隐式 coro 堆栈作为“闭包”,否则您必须创建类来执行相同操作。(取决于你如何做后者,如果协同程序更有效地完成工作,它们最终可能会更快。不过,这些都不是你分析的瓶颈)

于 2019-11-15T12:51:29.350 回答