Когда делал веб-сервер (win api), я использовал потоки, чтобы обеспечить скорость работы на многоядерных системах.
Nginx использует процессы, а не потоки. А почему?
Собственно, есть несколько предположений, но понять какое из них верное, гугл не помог:
1. Обойти лимит файловых дескрипторов на процесс.
2. Отказоустойчивость (упал 1 процесс — другие живи).
3. Безопасность (не уверен, что понимаю каким образом).
Приму другие догадки, но лучше реальные причины такого решения, спасибо.
Уточнение
Потоки вместо процессов != один поток на одно соединение.
Можно делать воркеры-процессы(nginx), можно воркеры-потоки(mywebserver), можно для каждого соединения создавать поток/процесс(apache).
Интересует, конкретно, почему nginx напилил воркеры-процессы, а не воркеры-потоки.
Ответ
Игорь Сысоев:
Изначально потоки планировались, но не были использованы по ряду причин:
1) более трудоёмкое программирование,
2) плохая поддержка потоков во FreeBSD и Linux на 2002-2004 год,
3) процессы обеспечивают естественную изоляцию ресурсов, уменьшая
конкуренцию за них.
-
Вопрос задан
-
4778 просмотров