当前位置: 首页 > 知识库问答 >
问题:

gRPC服务器是否为每个请求旋转一个新线程?

罗源
2023-03-14

我尝试分析一个gRPC java服务器。我主要看到下面的一组线程池。

    null

共有1个答案

刘建中
2023-03-14

gRPC Java服务器更接近Jetty/Tomcat样式,只是它是异步的。也就是说,在正常的servlet中,每个请求都要消耗一个线程,直到完成为止。虽然较新的Servlet版本允许您从专用线程中分离并继续异步工作(释放线程用于其他用途),但这种情况更不常见。在gRPC中,您可以自由地以任何一种风格工作。注意,gRPC默认使用cachedThreadPool来重用线程;在服务器端,通过serverbuilder.executor()用您自己的、通常是固定大小的池替换默认执行器是个好主意。

在内部,gRPC Java使用Netty-Style。这意味着完全非阻塞。您可以使用ServerBuilder.DirectExecutor()在Netty线程上运行。但是在这种情况下,您可能需要指定NettyServerBuilder.bosSeventLoopGroup()WorkerEventLoopGroup(),为了兼容性,ChannelType()

 类似资料:
  • 这是一个简单的场景: 用户从Web应用程序的网页触发一些操作。这个操作很重,需要更多的时间。 在操作在服务器端完成之前,用户触发器会用一些不同的参数表示相同的操作。因此,第二个请求的第二个操作也将开始处理。 在这种情况下,是否有两个不同的线程,比如第一个线程处理第一个请求,另一个线程处理第二个请求?或者它只是一个线程处理两个请求,第一个操作只是为了执行第二个请求而被中断(未完成)? 在这里,我不想

  • 我有一个用C#编写的grpc服务,它有2个调用,如Start和Stop。当客户端调用Start(这个调用需要很多时间),然后Stop服务器同步处理请求,而grpc启动了4个线程。 您能帮我了解它是否按设计运行,或者我错过了任何其他设置吗?

  • 我只是想了解如何在Java中编写一个每请求线程的TCP服务器。我已经编写了一个每连接线程的服务器,它运行serverSocket.accept()并在每次新连接进入时创建一个新线程。 如何将其修改为每请求线程服务器?我想传入的连接可以放入某种队列中,但是您如何知道哪个连接发出了请求&准备好了服务呢? 我怀疑NIO在这里是必要的,但不确定。 多谢了。 [编辑] 明确一点--原来的“服务器”只是我编写

  • 问题内容: 因此,我四处阅读,对于拥有CSRF令牌感到非常困惑,但是我应该为每个请求还是每小时生成一个新令牌? 但是,我们最好每小时生成一个令牌,然后我需要两个会话:令牌,到期, 我将如何处理该表格?只需将echo $ _SESSION [‘token’]放在隐藏值表单上,然后在提交时进行比较? 问题答案: 如果您按照表单请求进行操作-那么基本上就可以消除CSRF攻击的发生,并且可以解决另一个常见

  • 本文向大家介绍游戏服务器应该为每个用户开辟一个线程还是一个进程,为什么?相关面试题,主要包含被问及游戏服务器应该为每个用户开辟一个线程还是一个进程,为什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 游戏服务器应该为每个用户开辟一个进程。因为同一进程间的线程会相互影响,一个线程死掉会影响其他线程,从而导致进程崩溃。因此为了保证不同用户之间不会相互影响,应该为每个用户开辟一个进程

  • 我的理解是,在Tomcat中,每个请求将占用一个Java/(因此也是OS)线程。 想象一下,我有一个应用程序,有很多长时间运行的请求(例如一个有多个玩家的扑克游戏),涉及游戏内聊天和AJAX长轮询等。 有没有办法更改我的webapp的tomcat配置/体系结构,这样我就不会对每个请求使用线程,而是“截获”请求和响应,这样它们就可以作为队列的一部分进行处理?