Я пытаюсь понять, что делает Nginx так быстро, и у меня есть несколько вопросов.
Как я понимаю, Apache либо генерирует новый процесс для обслуживания каждого запроса, либо порождает новый поток для обслуживания каждого запроса. Поскольку каждый новый поток разделяет виртуальное адресное пространство, использование памяти продолжает подниматься, если в него поступает несколько одновременных запросов.
Nginx решает это, имея только один процесс прослушивания (Мастер), с одним рабочим потоком И 2 или 3 (число настраивается) рабочими процессами. Этот мастер-процесс/поток запускает цикл событий. Эффективно ждет любой входящий запрос. Когда запрос приходит, он дает этот запрос одному из рабочих процессов.
Пожалуйста, поправьте меня, если мое понимание не будет правильным.
Если это верно, то у меня есть несколько вопросов:
1.) Разве рабочий процесс не запускает несколько потоков и не сталкивается с той же проблемой, что и apache?
2.) Или это nginx быстро, потому что его основанная на события архитектура использует неблокирующий-IO под всем этим. Может быть, рабочий процесс порождает потоки, которые выполняют только неблокирующий-IO, это так?
3.) То, что "точно" - это "архитектура, основанная на событиях", может ли кто-то действительно упростить ее, так как я понимаю, как я. Это относится только к неблокирующему или другому?
Я получил ссылку c10k, я пытаюсь пройти через нее, но я не думаю его о своде, основанном на событиях. это больше похоже на неблокирующий IO.