gRPC cpp 同步与异步服务器性能

Posted

技术标签:

【中文标题】gRPC cpp 同步与异步服务器性能【英文标题】:gRPC cpp synchronous vs asynchronous server performance 【发布时间】:2021-10-07 16:39:49 【问题描述】:

我了解同步服务器和异步服务器之间的区别,但我想知道是否有这两种情况,哪一种会更高效异步或同步?

    同步:写入调用将被阻塞,直到消息准备好从内部完成队列在线发送。 异步:写调用立即返回,我们需要等待完成队列。 在同步服务器中,如果我们添加基本上为每次写入调用填充的队列和其他线程耗尽它并执行 stream.write 那么性能会相同吗?

    同步:gRPC 在内部创建线程池,线程数等于 CPU 的数量 异步:线程取决于实现。因此,如果我们为每个客户端创建单独的线程和完成队列,同步和异步的性能会相同吗?

【问题讨论】:

【参考方案1】:

理论上很难比较性能。根据经验,如果您的选择是让 gRPC 以设计处理的方式在内部处理并发调用,还是使用同步 API 自己管理 gRPC 调用并发,那么 gRPC 内部的性能调整可能比您可以管理的更好你自己。该建议可能存在例外情况,具体取决于许多变量……例如,如果服务器执行的操作非常快速且成本低廉且消息很小,则同步 API 可能没问题。

最后,基准是你的朋友。

gRPC 性能建议:https://grpc.io/docs/guides/performance/#c

官方 gRPC 基准(正在开发中):https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5180705743044608。作为这些基准测试基础的测试可能会为您的设计选择提供参考。

【讨论】:

以上是关于gRPC cpp 同步与异步服务器性能的主要内容,如果未能解决你的问题,请参考以下文章

同步与异步

HTTP请求中同步与异步有啥不同

同步与异步 阻塞与非阻塞

324 同步交互与异步交互

关于异步,同步,阻塞与非阻塞

同步与异步阻塞与非阻塞理解