Concurreny modelin grpc server in golang



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

更具体地说:

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

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

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

这些 goroutines 共享哪些数据?

我认为这个问题太宽泛了。net/http2google.golang.org/grpc包中的代码太多,如果不进行深入调查,就无法回答您的问题。但是,我们可以肯定,这些 goroutines 至少共享服务器本身,因为ServeConn不是一个自由函数,而是在http2.Server类型上定义的方法。

最新更新