Параллельная модель grpc-сервера в golang

#go #concurrency #grpc #grpc-go

#Вперед #параллелизм #grpc #grpc-go

Вопрос:

Я создал образец gRPC-клиента и сервера в golang (использовал protobufs). Я понимаю модель параллелизма в golang. Тем не менее, я пытаюсь понять модель параллелизма на сервере, принимающем параллельные запросы от одного и того же клиента (несколько подпрограмм на стороне клиента) / нескольких клиентов.

Более конкретно:

  1. Когда поступает новый вызов gRPC, создает ли сервер новую подпрограмму?
  2. Какие данные совместно используются этими программами? grpcServer.Serve Устанавливает ли граница для данных, совместно используемых между программами, т.Е. Все, Что было установлено ранее, является общим? (Я имею в виду потоки в Java, где потоки совместно используют глобальные данные)

Ответ №1:

Когда поступает новый вызов gRPC, создает ли сервер новую подпрограмму?

Да, и весьма вероятно, что это создает множество параллельных подпрограмм для обработки каждого соединения и запроса (особенно потокового запроса).

Какие данные совместно используются этими программами?

Я думаю, что этот вопрос слишком широкий. Слишком много кода как в net/http2 , так и google.golang.org/grpc в пакетах, чтобы ответить на ваш вопрос без глубокого изучения. Однако мы можем быть уверены, что эти программы используют, по крайней мере, сам сервер, потому ServeConn что это не бесплатная функция, а метод, определенный для http2.Server типа.