почему в epoll рекомендуются НЕБЛОКИРУЮЩИЕ розетки

я пытаюсь узнать, как использовать epoll () для приложения сервера tcp, потому что я ожидаю много соединений.
я пробовал проверять образцы и учебные пособия, они всегда рекомендуют использовать / настраивать сокеты, которые добавляются в epoll () как НЕБЛОКИРУЮЩИЕ сокеты. Зачем?

1

Решение

При традиционном блокировании ввода / вывода каждое соединение должно обрабатываться одним или несколькими выделенными потоками. По мере роста количества соединений увеличивается количество требуемых потоков. Эта модель работает достаточно хорошо с номерами соединений в сотни или менее тысяч, но она далеко не масштабируется.

Мультиплексирование и неблокирование ввода / вывода инвертируют модель, позволяя одному потоку обслуживать множество различных соединений. Это осуществляется путем одновременного мониторинга всех активных соединений и выполнения операций ввода-вывода только в тех случаях, когда они готовы к этому (например, поступили данные, что означает, что по крайней мере одно чтение может быть выполнено без блокировки).

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

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector