Разница между poll, select и epoll методами в сетевых приложениях заключается в их функциональности и особенностях работы: www.sobyte.net github.com
- Передача файловых дескрипторов в ядро: www.sobyte.net
- select: создаёт три набора файловых дескрипторов и копирует их в ядро, слушает действия чтения, записи и исключения. www.sobyte.net Количество дескрипторов, которые может открыть один процесс, ограничено (по умолчанию — 1024). www.sobyte.net
- poll: копирует входящий массив структур pollfd в ядро для прослушивания. www.sobyte.net
- epoll: при выполнении операции epoll_create создаёт красно-чёрное дерево в области высокоскоростного кэша ядра и список готовности, в котором хранятся уже готовые файловые дескрипторы. www.sobyte.net
- Определение состояния файловых дескрипторов для чтения и записи: www.sobyte.net
- select: проводит опрос, итеративно проходит через все дескрипторы и возвращает маску готовности дескриптора к операциям чтения и записи, на основе этой маски назначает значение. www.sobyte.net
- poll: также проводит опрос, запрашивает статус каждого дескриптора, добавляет элемент в очередь ожидания, если он готов, и продолжает итерацию. www.sobyte.net
- epoll: использует механизм обратного вызова. www.sobyte.net При выполнении операции epoll_ctl не только помещает файловый дескриптор в красно-чёрное дерево, но и регистрирует функцию обратного вызова. www.sobyte.net
- Поиск готовых файловых дескрипторов и передача их в состояние пользователя: www.sobyte.net
- select: передаёт копию ранее переданного fd_set в состояние пользователя и возвращает общее количество готовых дескрипторов. www.sobyte.net Пользовательское состояние не знает, какие дескрипторы готовы, и нужно пройти по ним. www.sobyte.net
- poll: передаёт копию ранее переданного массива fd в состояние пользователя и возвращает общее количество готовых дескрипторов. www.sobyte.net
- epoll: структура данных файлового дескриптора, созданная epoll, сама хранится в состоянии ядра, и системный вызов возвращается с памятью, связанной с файлом, чтобы ускорить передачу сообщений в пространство ядра. www.sobyte.net
Также select может работать с таймаутами порядка одной наносекунды, в то время как poll и epoll поддерживают лишь миллисекундную точность. habr.com