multithreading - gRPC cpp 同步与异步服务器性能
问题描述
我了解同步服务器和异步服务器之间的区别,但是我想知道是否有这两种情况,哪一种会是性能更高的异步或同步?
同步:写入调用将被阻塞,直到消息准备好从内部完成队列在线发送。异步:写调用立即返回,我们需要等待完成队列。在同步服务器中,如果我们添加基本上为每次写入调用填充的队列和其他线程耗尽它并执行 stream.write 那么性能会相同吗?
同步:gRPC 在内部创建线程池,线程数量等于 CPU 数量 异步:线程取决于实现。因此,如果我们为每个客户端创建单独的线程和完成队列,同步和异步的性能会相同吗?
解决方案
理论上很难比较性能。根据经验,如果您的选择是让 gRPC 以设计处理的方式在内部处理并发调用,还是使用同步 API 自己管理 gRPC 调用并发,那么 gRPC 内部的性能可能会比您可以管理的更好你自己。该建议可能存在例外情况,具体取决于许多变量……例如,如果服务器正在做一些非常快速且成本低廉的事情并且消息很小,那么同步 API 可能会很好。
最后,基准是你的朋友。
gRPC 性能建议:https ://grpc.io/docs/guides/performance/#c
官方 gRPC 基准(正在开发中):https ://performance-dot-grpc-testing.appspot.com/explore?dashboard=5180705743044608 。作为这些基准测试基础的测试可能会为您的设计选择提供信息。
推荐阅读
- javascript - 如何创建从多个 URL 列表打开链接的按钮?
- css - Css 来创建这个表视图
- android - 如何同时(不在 UI 线程上)执行多个视频和图像的压缩(根据我的用例最多 10 个文件)?
- c# - Monogame“找不到 ContentTypeReader 类型”
- vue.js - 键值对的 Vue 插值
- python - 无法在 python 中使用 openpyxl 写入 excel
- python - Pymongo 在子集合中找到?
- r - 一次检查向量和矩阵数据类型
- vue.js - Vue js 无法解析组件中的css代码
- django - 通过电子邮件登录时,AnonymousUser' 对象没有属性 '_meta