nginx: многопоточный, но использует несколько процессов?

Я пытаюсь понять, что делает Nginx таким быстрым, и у меня есть несколько вопросов.

Насколько я понимаю, Apache либо порождает новый процесс для обслуживания каждого запроса, либо порождает новый поток для обслуживания каждого запроса. Поскольку каждый новый поток разделяет виртуальное адресное пространство, использование памяти продолжает расти, если поступает несколько одновременных запросов.

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

Пожалуйста, поправьте меня, если мое вышеупомянутое понимание неверно

Если вышеизложенное верно, то у меня есть несколько вопросов:

1.) Разве рабочий процесс не будет порождать несколько потоков и запускаться в ту же проблему, что и apache?

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

3.) Что «в точности» представляет собой «архитектура, основанная на событиях», может ли кто-нибудь действительно упростить ее, чтобы кто-то вроде меня понял. Это относится только к неблокирующему io или еще чему-то?

У меня есть ссылка на c10k , я пытаюсь пройти через это, но я не думаю, что это связано с аркой на основе событий. вроде больше для неблокирующего ввода-вывода.

20
задан Brandon Wamboldt 24 April 2014 в 14:25
поделиться