gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:29 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

关于java - grpc-java的ServerBuilder中executor的具体用途是什么?它只是执行处理程序方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42408634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com