Конкуренция модели в GRPC сервере в Голанге - PullRequest
1 голос
/ 17 апреля 2019

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

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

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

1 Ответ

1 голос
/ 17 апреля 2019

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

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

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

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

...