Ядро - epoll

0
Ваша оценка: Нет

epoll является масштабируемой неблокирующей системой уведомления о событиях ввода-вывода в Linux. В отличии от более старых механизмов, у epoll время срабатывания не зависит от количества открытых файловых дескрипторов.

epoll используется для обработки событий неблокирующих TCP-сокетов, операционная система оповещает приложение, когда один из сокетов «под наблюдением» готов получить или отправить сообщение. В традиционном же подходе на каждый сокет выделяется поток выполнения (thread), который блокируется до возвращения обращения к соответствующему сокету.
Что это дает?

  • Не нужно впустую тратить системные ресурсы на создание, уничтожение и поддержания пула потоков выполнения.
  • Один системный процесс может поддерживать существенно большее количество TCP-соединений.
  • Длительные соединения, по которым редко поступают сообщения, не держат заблокированный поток и потребляют минимум системных ресурсов.
  • Отсутствие проблем с синхронизацией пула потоков и доступом к общей памяти.
  • Возможность (но не необходимость) без дополнительных сложностей держать в памяти процесса какое-то общее состояние, если приложение того требует.

Обратная сторона медали

  • Потоки выполнения в блокирующей модели имеют относительно короткий жизненный цикл и рано или поздно освобождают выделенную им память, процесс обработки неблокирующих соединений живет существенно дольше и намного более уязвим для утечек памяти.
  • Использование одного системного процесса без пула потоков выполнения ограничивает приложение использованием лишь одного процессорного ядра, что делает такой подход менее пригодным для приложений, в значительной мере использующих вычислительные ресурсы. В большинстве же случаев приемлемым решением является запуск нескольких одинаковых копий приложения на одном сервере по количеству процессорных ядер.
  • Ошибки в коде могут негативно повлиять на работу всего процесса приложения, в то время как в блокирующей модели потоки выполнения обычно достаточно изолированы друг от друга.

Сайт разработчика: http://www.xmailserver.org/linux-patches/nio-improve.html
Что почитать?


Разместил: vikos 29 Февраль 2012 в 15:45