#go #concurrency #grpc #grpc-go
#Вперед #параллелизм #grpc #grpc-go
Вопрос:
Я создал образец gRPC-клиента и сервера в golang (использовал protobufs). Я понимаю модель параллелизма в golang. Тем не менее, я пытаюсь понять модель параллелизма на сервере, принимающем параллельные запросы от одного и того же клиента (несколько подпрограмм на стороне клиента) / нескольких клиентов.
Более конкретно:
- Когда поступает новый вызов gRPC, создает ли сервер новую подпрограмму?
- Какие данные совместно используются этими программами?
grpcServer.Serve
Устанавливает ли граница для данных, совместно используемых между программами, т.Е. Все, Что было установлено ранее, является общим? (Я имею в виду потоки в Java, где потоки совместно используют глобальные данные)
Ответ №1:
Когда поступает новый вызов gRPC, создает ли сервер новую подпрограмму?
Да, и весьма вероятно, что это создает множество параллельных подпрограмм для обработки каждого соединения и запроса (особенно потокового запроса).
Какие данные совместно используются этими программами?
Я думаю, что этот вопрос слишком широкий. Слишком много кода как в net/http2
, так и google.golang.org/grpc
в пакетах, чтобы ответить на ваш вопрос без глубокого изучения. Однако мы можем быть уверены, что эти программы используют, по крайней мере, сам сервер, потому ServeConn
что это не бесплатная функция, а метод, определенный для http2.Server
типа.