Как происходит блокировка синхронной функции, выполняющей сетевой запрос?
С асинхронными всё понятно: event loop
с thread pool
'ом, и вызов callback
'а по событию через добавление в очередь. Но как происходит блокировка? Если функция вызвана, она должна на каком-то моменте остановиться, и зациклится на проверке результата. Это же не через бесконечный цикл реализуется? Или да?
while (true) {
if (atomic_completed) break;
std::this_thread::sleep_for(10ms);
}
Это единственный способ блокирующего вызова? (мне кажется, что это костыль)
PS#1: Понятно что у ядра ОС своя внутрення очередь, но это ж другой процесс, а текущий как останавливается?
PS#2: Видимо у API ОС должна быть функция типа: останови мой поток, пока сетевой запрос не вернёт ответ?
Источник: Stack Overflow на русском