1

我在 golang 中创建了一个示例 gRPC 客户端和服务器(使用了 protobufs)。我了解 golang 中的并发模型。但是,我试图了解服务器中的并发模型,该服务器接受来自同一客户端(客户端上的多个 goroutine)/多个客户端的并行请求。

进一步来说:

  1. 当一个新的 gRPC 调用到来时,服务器是否会创建一个新的 goroutine?
  2. 这些 goroutine 共享哪些数据?是否grpcServer.Serve为跨 goroutine 共享的数据设置边界,即之前设置的所有内容都是共享的?(我正在考虑Java中的线程共享全局数据的线程)
4

1 回答 1

1

当一个新的 gRPC 调用到来时,服务器是否会创建一个新的 goroutine?

是的,它很可能会创建大量并发 goroutine 来处理每个连接和请求(尤其是流式请求)。

这些 goroutine 共享哪些数据?

我觉得这个问题太笼统了。net/http2在没有深入调查的情况下,包和包中都有太多的代码google.golang.org/grpc来回答您的问题。但是,我们可以肯定,这些 goroutine 至少共享服务器本身,因为ServeConn它不是一个自由函数,而是一个定义在http2.Server类型上的方法。

于 2019-04-17T15:23:38.933 回答