Что такое мультиплексирование ввода-вывода? Что такое эпол? Возможно, вы прочитали много статей, но вы все еще чувствуете туман.Сегодня мы откладываем текст и выпускаем анимацию, может быть, вы поймете.
Мультиплексирование ввода/вывода
Типичный результат запроса показан на следующем рисунке:
Однако сервер часто обрабатывает не один запрос, а часто несколько запросов, для этого запроса будет генерироваться процесс или поток для каждого запроса в это время.
Большинство этих потоков запросов или процессов находятся в фазе ожидания, и лишь некоторые из них получают данные. Таким образом, это очень ресурсоемко, и управление этими потоками или процессами также является проблемой.
Поэтому некоторые люди думают о способе: мы используем поток или процесс только для работы с ядром системы и находим способ записывать состояние потока ввода-вывода каждого приложения, и ответ будет возвращен соответствующему приложению.
Или изображение ниже:
выбрать, опрос, epoll
select, poll и epoll — все это конкретные реализации мультиплексирования ввода-вывода, и они появляются по порядку.
select был первой реализацией (в BSD примерно в 1983 году).
После того, как был реализован select, было обнаружено много проблем, а затем в 1997 году был реализован poll, и select был улучшен, Select и poll очень похожи.
Позднее, в 2002 году, были внесены серьезные улучшения в реализацию epoll.
Epoll очень отличается от выбора / опроса:
Например, поток обработки select/poll выглядит следующим образом:
Процесс обработки epoll выглядит следующим образом:
Таким образом, нет необходимости просматривать тысячи списков сообщений, и вы можете напрямую определить, какой сокет содержит данные.
Итак, как это достигается?
В первые дни реализацией epoll была хеш-таблица, но позже она была изменена на красно-черное дерево и связанный список из-за большого занимаемого места.
Связанный список содержит все активные ссылки, а красно-черное дерево содержит все события. Две части каждый выполняют свои обязанности. Таким образом, при получении данных из ядра вам нужно только пройти данные в связанный список, и при регистрации события чтения или событие записи, запишите его в красно-черном дереве.
Результаты результат:
- Создание/изменение/удаление сообщений очень эффективно: O(logN).
- Также очень быстро получить активные ссылки, потому что большинство из них являются неактивными ссылками в течение определенного периода времени, а активных ссылок всего несколько, нужно пройти только несколько активных ссылок.
Для получения более интересного контента, пожалуйста, обратите внимание на мой публичный аккаунт WeChat.互联网技术窝
Или добавьте WeChat для обсуждения и общения:
использованная литература: