Wailt Пока grp c :: Серверные потоки выходят - PullRequest
0 голосов
/ 01 апреля 2020

Я не могу понять поведение неинициализации сервера gRP C.

Точнее, я не понимаю, почему эти четыре потока gRP C все еще существуют (пока я на линии 52, после server_ неинициализирован и вышел из области действия.

Мой самый простой пример: enter image description here В исходном коде gRP C я увидел, что метод grpc::Server::ShutDown() (строка 42) устанавливает ThreadManager::shutdown_ в true и grpc::Server::Wait() (строка 43) входит в condition_variable::Wait() пока не завершатся все потоки, но в моем случае я вижу другое поведение.

Как это возможно? Может быть, я что-то неправильно понимаю? Как я могу ждать, пока эти потоки не завершатся?

1 Ответ

1 голос
/ 03 апреля 2020

Завершение работы сервера ожидает завершения потоков, связанных с выполнением RPC на синхронном сервере gRP C, но существуют другие потоки, созданные gRP C в разное время для других целей (например, преобразователь имен, таймер). Так что это могут быть темы, которые вы видите. Вы должны знать, где были созданы эти потоки или какой код они выполняют, чтобы сказать наверняка. Эти другие потоки будут отключены в какой-то момент как часть общего завершения работы библиотеки (что происходит, только когда все объекты API gRP C освобождены).

...