执行器在 grpc-java 的 ServerBuilder 中的确切用途是什么?它是否只执行处理程序方法?

2022-09-01 23:10:47

grpc-java 在其中使用执行器,如果未由该方法定义,则默认使用静态缓存线程池。这个执行器的确切用途是什么?它只是执行处理程序方法还是也执行“其他操作”?ServerBuilderbuilder.executor()

另外,grpc如何定义netty worker?具体来说,我想知道如何将工作线程分配给此工作线程组。线程数是默认值,还是计算机内核数的函数?另外,关于上述问题,这些网状工人如何与遗嘱执行人合作?他们是否只处理 I/O - 读取和写入通道?EventLoopGroup

编辑:Netty,默认情况下创建(2 *内核数)工作线程。


答案 1

您提供的是实际执行 rpc 的回调的内容。这将释放 以继续在连接上处理数据。当新消息从网络到达时,将在事件循环中读取该消息,然后将堆栈向上传播到执行器。执行器获取消息并将其传递给您的消息,该消息将实际执行数据的处理。ExecutorEventLoopServerCall.Listener

默认情况下,gRPC 使用缓存线程池,以便非常容易上手。但是,强烈建议您提供自己的执行程序。原因是默认线程池在负载下行为异常,在其余线程繁忙时创建新线程。

为了设置事件循环组,请在 NettyServerBuilder 上调用 workerEventLoopGroup 方法。gRPC并不严格依赖于Netty(其他服务器传输是可能的),因此必须使用Netty特定的构建器。


答案 2