Я понимаю поток, управляемый, что Apache использует: каждое соединение открывает поток и когда ответ отправляется, обсуждение закрывается, высвобождая средства на другие потоки).
Но я не получаю управляемый событиями дизайн, который использует Nginx. Я считал некоторые основы об управляемом событиями дизайне.. но я не понимаю, как это используется nginx для обработки веб-запросов.
Где я могу считать и понять, как Nginx обрабатывает соединения управляемым событиями способом, таким образом, я добираюсь, почему это лучше, вместо того, чтобы просто признать, что основанный на событии дизайн лучше, чем управляемый потоком дизайн.
Nginx использует Reactor. По сути, он однопоточный (но может форкать несколько процессов, чтобы использовать несколько ядер). Главный цикл событий ожидает сигнала ОС о готовности - например, что данные доступны для чтения из сокета, после чего они считываются в буфер и обрабатываются. Один поток может очень эффективно обслуживать десятки тысяч одновременных соединений (модель "поток на соединение" не справится с этой задачей из-за огромных накладных расходов на переключение контекста, а также большого потребления памяти, поскольку каждому потоку нужен свой стек).