【发布时间】:2021-06-08 16:12:04
【问题描述】:
我们编写了一个 gRPC 异步服务器/客户端来并行化某些处理。我有一个关于异步服务器如何工作的基本问题。
例如,假设我们从客户端对一个方法进行两次相同的异步调用,但为每次调用提供不同的输入(原始数据量的一半),以便我们可以并行化此操作。当我们这样做时,服务器端发生了什么?
我的假设是服务器会将这两个调用排队,然后在两个单独的线程中同时处理它们。但是,似乎并非如此。
处理一个包含所有原始数据的单个调用所花费的时间结果小于同一方法的两个 Async 调用所花费的总时间,每个调用的原始数据为一半。为什么会这样?
谢谢!
【问题讨论】:
-
这个问题很难回答,因为“异步”更多的是一个概念,而不是一个具体的系统工具。例如,异步性可以通过线程(如您所说)或非阻塞系统调用或批处理调用(如
select或epoll或kqueue取决于系统/版本/代码库年龄)来实现。您必须查阅有问题的服务器代码才能确定。至于异步编程,最好不要假设执行的顺序或及时性。至于加速,请记住,服务器通常针对扩展使用进行优化,而不是个人请求。 -
您好!感谢您的回复。我的问题是在 gRPC 的背景下以及我对它的理解。从 gRPC Async 示例中不清楚当我们从客户端向服务器进行异步调用时到底发生了什么。我感谢任何对此特定背景的回答。
标签: grpc