asynchronous - gRPC 是否支持 ASYNCHRONOUS SERVER 以及通过服务器端类似回调机制的异步客户端?
问题描述
这与异步客户端到服务器调用无关。它是关于 gRPC 服务器编程模型的。为了最大化 gRPC 服务器的吞吐量,希望 gRPC 服务器将接收到的请求委托给非 gRPC 线程,并为每个请求提供回调。当非 gRPC 线程完成任务时,它们会通知 gRPC 服务器通过为这些异步处理的请求调用配备的回调来响应 gRPC 客户端。这对grpc可能吗?我注意到有一个关于回调机制的实验特性。但是,实验性功能不是我的项目的选择。
或者,换句话说,1) gRPC 服务器线程如何不被耗时的请求处理阻塞?
解决方案
C++ 服务器有两种可用的线程模型:同步和异步。大多数用户都希望使用同步模型:服务器将有一个(内部)线程池,用于管理将请求多路复用到一定数量的线程(在请求之间重用线程)。异步模型允许您使用自己的线程模型,但使用起来有点棘手 - 在该模式下,您在服务器准备好时请求新调用,并在没有工作时阻塞完成队列。通过安排何时阻塞完成队列以及在哪些完成队列上发出请求,您可以安排各种线程模型。
https://groups.google.com/g/grpc-io/c/Cul6fd7cOB0/m/c5gndkNpGQAJ详细讨论了两种同步/异步服务器模型。
推荐阅读
- jquery - 用于无效、取消选择或未选中的表单控件的 jQuery 选择器
- pandas - Pandas get_dummies 用于一列列表,其中单元格在该列中可能没有值
- checkstyle - Checkstyle 和 StaticMetamodel 类
- ansible - 以非 root 用户身份运行 Ansible 命令不起作用
- azure-active-directory - Azure AD Microsoft Identity Web OpenIdConnectEvents - 如何在注销期间访问来自用户令牌的可选声明
- html - 如何更改导航栏中项目边框的形状
- python - python多客户端聊天不起作用
- jenkins - Ansible 读取 Jenkins 布尔参数
- python - 第一个程序不会打印价格
- springdoc - 具有多个 api-docs 的 Springdoc