Как происходит блокировка синхронной функции, выполняющей сетевой запрос?

Рейтинг: 0Ответов: 0Опубликовано: 01.06.2023

С асинхронными всё понятно: event loop с thread pool'ом, и вызов callback'а по событию через добавление в очередь. Но как происходит блокировка? Если функция вызвана, она должна на каком-то моменте остановиться, и зациклится на проверке результата. Это же не через бесконечный цикл реализуется? Или да?

while (true) {
    if (atomic_completed) break;
    std::this_thread::sleep_for(10ms);
}

Это единственный способ блокирующего вызова? (мне кажется, что это костыль)

PS#1: Понятно что у ядра ОС своя внутрення очередь, но это ж другой процесс, а текущий как останавливается?

PS#2: Видимо у API ОС должна быть функция типа: останови мой поток, пока сетевой запрос не вернёт ответ?

Ответы

Ответов пока нет.