Я внедряю асинхронный сервер gRPC на C ++. Реализация в целом основана на приведенном здесь примере: https://grpc.io/docs/tutorials/async/helloasync-cpp.html, с предупреждением о том, что я запускаю N очередей завершения по N потокам.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я создаю синхронный клиент и вызываю RPC для нескольких потоков одновременно, сервер получает их синхронно через один поток.
Таким образом, даже если клиент одновременно вызывает 10 запросов в 10 потоках, сервер может обрабатывать только один RPC за раз. Это означает, что если RPC требуется одна секунда для завершения, все 10 одновременных RPC также завершатся через 10 секунд (даже если сервер будет обрабатывать каждый rpc в отдельном потоке).
Ожидается ли такое поведение при gRPC или я что-то не так делаю? Нужно ли мне (для получения одновременного rpcs) создавать асинхронный клиент?