Общее объяснение того, как работает epoll?
Я делаю техническую переписку о переключении с опроса базы данных (через синхронный вызов хранимой процедуры) на очередь сообщений (через pub/sub). Я хотел бы объяснить, как опрос базы данных сильно отличается и намного тяжелее, чем установка соединения с брокером AMQP и настройка обработчика сообщений.
Может, кто-то может дать здесь объяснение или указать хороший учебник высокого уровня о том, как работает epoll при уведомлении о появлении новых данных в сокете?
1 ответ
Я предполагаю, что "как работает epoll", вы имеете в виду, как он работает с точки зрения пользователя (например, как ваш код получает уведомления и как с ним работать), а не с точки зрения ядра (как в как реализован epoll).
Короткая версия очень проста: poll
кроме двух вещей:
- Он использует дескриптор непрозрачной структуры данных, поэтому вы не будете передавать столько данных туда-сюда через границу ядра.
- У него есть варианты, которые
poll
не имеет (в частности, запуска по фронту и однократных уведомлений), что позволяет вам писать более эффективный код в определенных ситуациях.
(Существует также тот факт, что он работает только на Linux. BSD и связанные системы имеют kqueue
значительно отличающийся способ получить некоторые из тех же преимуществ, /dev/poll
и т. д., а некоторые * никсы не имеют ничего эквивалентного. Так что если вы хотите написать переносимый код, вы должны использовать poll
или используйте какую-нибудь библиотеку более высокого уровня, такую как libevent
или напишите эквивалент libevent
сам.)
Если вы уже поняли select
а также poll
статья в Википедии и сообщение в блоге, на которое есть ссылки в своих ссылках, должны между ними рассказать вам почти все, что вам нужно знать, а страница руководства заполнит все пробелы.
Если нет, иди узнать о poll
сначала, и только тогда будет смысл узнать, как epoll
это отличается.
Я до сих пор не уверен, как это вообще относится к вашему главному вопросу. Вы можете epoll
inotify
в файле базы данных, или pipe
или же socket
лежащие в основе системы обмена сообщениями, или что-нибудь еще, что может быть представлено как файловый дескриптор в Linux, поэтому я не уверен, как понимать epoll
поможет вам объяснить различия между опросом базы данных и опросом очереди сообщений. Конечно, между ними есть огромные различия, но механизм запуска событий не является одним из них.