Общее объяснение того, как работает epoll?

Я делаю техническую переписку о переключении с опроса базы данных (через синхронный вызов хранимой процедуры) на очередь сообщений (через pub/sub). Я хотел бы объяснить, как опрос базы данных сильно отличается и намного тяжелее, чем установка соединения с брокером AMQP и настройка обработчика сообщений.

Может, кто-то может дать здесь объяснение или указать хороший учебник высокого уровня о том, как работает epoll при уведомлении о появлении новых данных в сокете?

1 ответ

Я предполагаю, что "как работает epoll", вы имеете в виду, как он работает с точки зрения пользователя (например, как ваш код получает уведомления и как с ним работать), а не с точки зрения ядра (как в как реализован epoll).

Короткая версия очень проста: pollкроме двух вещей:

  1. Он использует дескриптор непрозрачной структуры данных, поэтому вы не будете передавать столько данных туда-сюда через границу ядра.
  2. У него есть варианты, которые poll не имеет (в частности, запуска по фронту и однократных уведомлений), что позволяет вам писать более эффективный код в определенных ситуациях.

(Существует также тот факт, что он работает только на Linux. BSD и связанные системы имеют kqueueзначительно отличающийся способ получить некоторые из тех же преимуществ, /dev/pollи т. д., а некоторые * никсы не имеют ничего эквивалентного. Так что если вы хотите написать переносимый код, вы должны использовать pollили используйте какую-нибудь библиотеку более высокого уровня, такую ​​как libeventили напишите эквивалент libevent сам.)

Если вы уже поняли select а также poll статья в Википедии и сообщение в блоге, на которое есть ссылки в своих ссылках, должны между ними рассказать вам почти все, что вам нужно знать, а страница руководства заполнит все пробелы.

Если нет, иди узнать о poll сначала, и только тогда будет смысл узнать, как epoll это отличается.

Я до сих пор не уверен, как это вообще относится к вашему главному вопросу. Вы можете epoll inotify в файле базы данных, или pipe или же socket лежащие в основе системы обмена сообщениями, или что-нибудь еще, что может быть представлено как файловый дескриптор в Linux, поэтому я не уверен, как понимать epoll поможет вам объяснить различия между опросом базы данных и опросом очереди сообщений. Конечно, между ними есть огромные различия, но механизм запуска событий не является одним из них.

Другие вопросы по тегам