作者:锦瑟刻下两段缠绵 | 来源:互联网 | 2023-02-10 23:18
grpc-java在ServerBuilder
其中使用了一个执行程序,如果没有由该builder.executor()
方法定义,则默认情况下使用静态缓存线程池.这个遗嘱执行人的确切用途是什么?它只是执行处理程序方法还是执行"其他"操作?
另外,grpc如何定义网络工作者EventLoopGroup
?具体来说,我想知道如何将工作线程分配给此工作组.是否有线程数的默认值,或者它是机器核心数的函数?另外,关于上述问题,这些网络工作者如何与遗嘱执行人合作?他们只处理I/O - 读取和写入通道吗?
编辑:Netty,默认创建(2*个核心数)工作线程.
1> Carl Mastran..:
在Executor
您提供的是实际执行的RPC的回调.这释放了EventLoop
继续处理连接数据.当新消息从网络到达时,它将在事件循环中读取,然后在堆栈中向上传播到执行程序.执行程序接收消息并将它们传递给您ServerCall.Listener
将实际处理数据的消息.
默认情况下,gRPC使用缓存的线程池,因此很容易上手.但是强烈建议您提供自己的执行者.原因是默认线程池在负载下表现不佳,在其余线程忙时创建新线程.
要设置事件循环组,请在NettyServerBuilder上调用workerEventLoopGroup方法.gRPC并不严格依赖于Netty(可能有其他服务器传输),因此必须使用Netty特定构建器.
是的,使用固定大小的线程池.像`Executors.newFixedThreadPool(16)`这样的东西
由于强烈建议不要使用默认值,因此gRPC是否针对不同情况推荐了执行程序?
您的ServiceImplBase应该是线程安全的。