首页 > 解决方案 > gRPC 是否支持 ASYNCHRONOUS SERVER 以及通过服务器端类似回调机制的异步客户端?

问题描述

这与异步客户端到服务器调用无关。它是关于 gRPC 服务器编程模型的。为了最大化 gRPC 服务器的吞吐量,希望 gRPC 服务器将接收到的请求委托给非 gRPC 线程,并为每个请求提供回调。当非 gRPC 线程完成任务时,它们会通知 gRPC 服务器通过为这些异步处理的请求调用配备的回调来响应 gRPC 客户端。这对grpc可能吗?我注意到有一个关于回调机制的实验特性。但是,实验性功能不是我的项目的选择。

或者,换句话说,1) gRPC 服务器线程如何不被耗时的请求处理阻塞?

标签: asynchronousservercallbackgrpc

解决方案


C++ 服务器有两种可用的线程模型:同步和异步。大多数用户都希望使用同步模型:服务器将有一个(内部)线程池,用于管理将请求多路复用到一定数量的线程(在请求之间重用线程)。异步模型允许您使用自己的线程模型,但使用起来有点棘手 - 在该模式下,您在服务器准备好时请求新调用,并在没有工作时阻塞完成队列。通过安排何时阻塞完成队列以及在哪些完成队列上发出请求,您可以安排各种线程模型。

https://groups.google.com/g/grpc-io/c/Cul6fd7cOB0/m/c5gndkNpGQAJ详细讨论了两种同步/异步服务器模型。


推荐阅读