Web gRPC如何处理多个重叠请求?

Web gRPC如何处理多个重叠请求?,web,protocol-buffers,grpc,rpc,grpc-python,Web,Protocol Buffers,Grpc,Rpc,Grpc Python,比方说,gRPC客户端向gRPC服务器发出两个请求R1和R2,一个接一个(假设没有任何明显的时间间隔,即R2是在R1仍然未被服务时发出的)。另外,假设R1比R2花费更多的时间。 在这种情况下,我应该首先期待R2的响应,因为这需要较少的时间,还是应该首先期待R1的响应,因为此请求是在R2之前发出的?会发生什么,为什么? 据我观察,我认为请求是以FCFS方式提供的,因此,R1的响应将首先由客户端接收,然后由R2接收,但我不确定。理论上,没有什么会阻止服务器和客户端并行处理gRPC请求。GRPC连接是

比方说,gRPC客户端向gRPC服务器发出两个请求R1和R2,一个接一个(假设没有任何明显的时间间隔,即R2是在R1仍然未被服务时发出的)。另外,假设R1比R2花费更多的时间。 在这种情况下,我应该首先期待R2的响应,因为这需要较少的时间,还是应该首先期待R1的响应,因为此请求是在R2之前发出的?会发生什么,为什么?
据我观察,我认为请求是以FCFS方式提供的,因此,R1的响应将首先由客户端接收,然后由R2接收,但我不确定。

理论上,没有什么会阻止服务器和客户端并行处理gRPC请求。GRPC连接是通过HTTP/2建立的,一次可以处理多个请求。所以是的——若服务器不使用某些特定的同步或限制机制,那个么请求将是具有重叠的进程。如果服务器资源或策略不允许,则应逐个处理这些资源或策略。此外,我可以添加比请求可以有一个超时后,它将被取消。如此长的等待时间可能导致取消和根本不处理。

所有请求都应并行处理。例如,Java实现的gRPC体系结构分为2个“部分”:

  • 事件循环在一个线程工作组中运行-它类似于我们对反应式实现所做的操作。每个内核一个线程来处理传入的请求

  • 请求处理在专用线程中完成,默认情况下,该线程将使用CachedThreadPool系统创建

对于像Javascript这样的单线程语言,我不确定它们是如何完成的,但我猜它是在同一个线程中完成的,因此它最终会对请求进行排队