Golang GRPC服务器中的并发模型

时间:2019-04-17 05:20:42

标签: go concurrency grpc grpc-go

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

更具体地说:

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

1 个答案:

答案 0 :(得分:1)

  

当出现新的gRPC调用时,服务器是否创建新的goroutine?

是的,而且很可能会创建许多并发的goroutine来处理每个连接和请求(尤其是流请求)。

  

这些goroutine共享哪些数据?

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