grpc-java的ServerBuilder中executor的具体用途是什么?它只是执行处理程序方法吗?

What is the exact use of the executor in grpc-java’s ServerBuilder? Does it just execute the handler methods?

grpc-java 在其 ServerBuilder 中使用了一个执行器,如果 builder.executor() 方法没有定义,则默认使用静态缓存线程池。这个执行器的具体用途是什么?它只是执行处理程序方法还是还执行“其他操作”?

还有,grpc是怎么定义netty worker的EventLoopGroup?具体来说,我想知道工作线程是如何分配给这个工作组的。线程数是否有默认值,或者它是机器核心数的函数?另外,关于上面的问题,这些 netty worker 如何与 executor 一起工作?他们只处理 I/O - 读写通道吗?

编辑:Netty,默认创建(2 * 核心数)个工作线程。

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

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

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