Я обнаружил, что multi_accept по умолчанию отключен в Nginx следующим образом:
Вероятно, потому что при включении все рабочие процессы активны и пытаются обрабатывать все входящие запросы одновременно. Когда этот параметр отключен, Nginx решает, какой дочерний процесс будет обрабатывать запрос один за другим. Поскольку Nginx в этом отношении очень эффективен, это, вероятно, хорошо подходит большинству людей. Некоторые считают его включение рискованным, поскольку это может затопить рабочие соединения запросами. Ваши настройки TCP на уровне ОС, вероятно, тоже сыграют свою роль.
multi_accept off
: рабочий принимает только одно соединение, обрабатывает его и затем возвращается ядру для обработки следующего события.
multi_accept on
: рабочий сделал бы accept
в цикле, пока не получит EAGAIN
Ну наконец то. Это может быть полезно при наличии большого количества подключений, отключая обработку событий, что требует дополнительного участия ядра. Но если входящих подключений не так много, тогда EAGAIN
будут попадать довольно часто, скажем, с 1:1
соотношение. Этот подход также может вызвать дисбаланс обработки соединений, особенно когда они поступают нерегулярно и SO_REUSEPORT
не используется.
В общем - вроде "хакерский", наверное, вообще не стоит с ним возиться, но ручка все еще на месте - на всякий случай может пригодиться.
В значительной степени основан на объяснение Валентин Бартенев, список рассылки nginx-ru.