как работает неблокирующий цикл событий? - PullRequest
3 голосов
/ 18 июня 2010

Twisted имеет «неблокирующий» цикл событий.

Я понимаю, что делает цикл событий блокировки (вроде как, со страницы Википедии), но не могу понять, как это делает неблокирующий цикл.

1 Ответ

3 голосов
/ 18 июня 2010
while (true)
    wait_for_events
    handle_events

По сути, неблокирующий цикл обработки событий использует устройство, которое позволяет ожидать нескольких событий одновременно (select / poll в UNIX, WaitForMultipleEvents в Windows, epoll в Linux kqueue в FreeBSD и т. Д.). В каждой итерации основного цикла события (файловые дескрипторы, таймеры и т. Д.) Регистрируются в каком-то дескрипторе. Затем вызывается функция, которая ожидает события (например, select). Обычно это возвращает все события, которые произошли во время вызова этой функции. Наконец, цикл обрабатывает эти события - как правило, вызывая обратные вызовы, связанные с событиями.

Подробности смотрите в реализации libevent или некоторых циклов событий инструментария GUI - GTK + или Qt.

...