Возьмем nginx vs apache в качестве прокси.
Nginx:
Вызываем select (epoll_wait/kevent/whatever) — контекст переключается. Получаем дескриптор(ы). Дальше вызываем read — контекст переключается. Вызываем write — контекст переключается. Т.е. имеем переключение контекста на каждый read/write + на select.
Apache:
Имеем кучу потоков, каждый из которых спит ожидая записи/чтения из/в сокета. Приходят данные — контекст переключается. Какие то дополнительные переключения между вызовами блокирующих функций крайне маловероятны.
Т.е при прочих равных, по _количеству_ переключений треды даже немного лучше, т.к. нет дополнительного вызова select.
Тысячи тредов спящих в ожидании завершения операции ввода/вывода для операционки мало чем отличиются от тысяч сокетов в мультиплексоре делающих то же самое. Нет?
Получается у апача более дорогой только прием нового соединения, а все остальное не более чем миф?
epoll, select