epoll_wait блокирует поток до готовности дескрипторов, таймаута или сигнала. Это избавляет event loop от постоянного опроса, но не гарантирует пробуждение строго в наносекунду появления данных.
Как системный вызов epoll_wait позволяет Python-приложению засыпать и просыпаться строго в момент появления данных в сокете?
epoll_wait блокирует поток до готовности дескрипторов, таймаута или сигнала. Это избавляет event loop от постоянного опроса, но не гарантирует пробуждение строго в наносекунду появления данных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
epoll_wait блокирует поток до готовности дескрипторов, таймаута или сигнала. Это избавляет event loop от постоянного опроса, но не гарантирует пробуждение строго в наносекунду появления данных.
Ядро сообщает о готовности I/O, после чего планировщик ОС должен дать потоку CPU, а event loop — выполнить обработчик. Готовность к чтению может означать также закрытие соединения или ошибку. Между уведомлением и чтением состояние способно измениться, поэтому сокеты используют неблокирующе и обрабатывают EAGAIN. На других платформах Python может использовать иной механизм ожидания.
Источник: man7.org.