Как системный вызов epoll_wait позволяет Python-приложению засыпать и просыпаться строго в момент появления данных в сокете?

epoll_wait блокирует поток до готовности дескрипторов, таймаута или сигнала. Это избавляет event loop от постоянного опроса, но не гарантирует пробуждение строго в наносекунду появления данных.

Короткий ответ

Что ответить на собеседовании

epoll_wait блокирует поток до готовности дескрипторов, таймаута или сигнала. Это избавляет event loop от постоянного опроса, но не гарантирует пробуждение строго в наносекунду появления данных.

Подробный разбор

Ответ с пояснениями

epoll_wait блокирует поток до готовности дескрипторов, таймаута или сигнала. Это избавляет event loop от постоянного опроса, но не гарантирует пробуждение строго в наносекунду появления данных.

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

Источник: man7.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее