gRPC Java 服务器更接近于 Jetty/Tomcat 风格,除了它是异步的。也就是说,在普通的 Servlet 中,每个请求都消耗一个线程,直到它完成。虽然较新的 Servlet 版本允许您与专用线程分离并继续异步工作(释放线程以供其他用途),但这种情况并不常见。在 gRPC 中,您可以自由地以任何一种方式工作。请注意,gRPC 默认使用 cachedThreadPool 来重用线程;在服务器端,最好通过ServerBuilder.executor().
gRPC Java 在内部使用 Netty 风格。这意味着完全非阻塞。您可以使用ServerBuilder.directExecutor()在 Netty 线程上运行。虽然在这种情况下,你可能要指定NettyServerBuilder.bossEventLoopGroup(),workerEventLoopGroup()以及兼容性channelType()。
据我所知,您可以在构建 GRPC 服务器/客户端时指定使用 directExecutor(),这将确保所有工作都在 IO 线程中完成,因此线程将被共享。出于安全原因,默认情况下不这样做,因为如果您在 IO 线程中,则需要非常小心地执行操作(就像您永远不应该阻塞在那里一样)。
| 归档时间: |
|
| 查看次数: |
3765 次 |
| 最近记录: |