3

我正在尝试使用boost::beast来实现提供一些 REST API 的 Web 服务。这些 API 占用大量 CPU,几乎没有磁盘或数据库 I/O。我的目标是通过 OK 吞吐量优化延迟。我应该使用同步还是异步方式来实现它们?

谢谢!

4

3 回答 3

2

如果你想要超时,你别无选择,只能使用 Boost.Beast / Boost.Asio / Asio / Networking TS 提供的异步 API。

于 2019-02-28T15:44:15.107 回答
1

您可以测试自己的方式,看看哪种方式最适合您的用例。如果性能不够好,则使用并发设计模式进行优化。

我想您应该对“OK 吞吐量”的含义进行具体衡量,然后在您的系统中对其进行基准测试。

于 2019-02-27T06:25:22.547 回答
1

一般来说,当您在几乎没有 CPU 开销的情况下进行 I/O 密集型工作时,最好使用非阻塞或异步。然而,当操作CPU 密集型的,线程模型往往更有意义。

这样做的原因很简单:长时间阻塞事件循环通常是一个坏主意——当使用异步模型进行 CPU 繁重的计算时会发生这种情况。

当您开始阻塞事件循环时,诸如计时器之类的事情不会像它们应该的那样运行,因为它们只有在您将控制权返回给事件循环后才能触发。这通常不是你想要的。

于 2019-02-27T09:35:22.337 回答