В веб-серверах на основе PHP (или Java / ASP.NET / Ruby) каждый клиентский запрос создается в новом потоке. Но в Node.js все клиенты работают в одном потоке (они могут даже использовать одни и те же переменные!) Я понимаю, что операции ввода-вывода основаны на событиях, поэтому они не блокируют цикл основного потока.
Я не понимаю, ПОЧЕМУ автор Node выбрал его как однопоточный? Это усложняет ситуацию. Например, я не могу запустить функцию с интенсивным использованием процессора, потому что она блокирует основной поток (и новые клиентские запросы блокируются), поэтому мне нужно порождать процесс (что означает, что мне нужно создать отдельный файл JavaScript и выполнить другой процесс узла на Это). Однако в PHP процессоры с интенсивными процессами не блокируют других клиентов, потому что, как я уже говорил, каждый клиент находится в отдельном потоке. Каковы его преимущества по сравнению с многопоточными веб-серверами?
Примечание: я использовал кластеризацию, чтобы обойти это, но это не красиво.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!отображает пять потоков в моей системе. Основной цикл обработки событий является однопоточным (это не имело бы особого смысла, если бы не было), но Node сильно многопоточный, и вы можете писать многопоточные однопроцессные приложения, если хотите. Я хотел бы написать исчерпывающий ответ об этом, но некоторые люди решили закрыть ваш вопрос, поэтому я не могу. Я голосую, чтобы открыть его. Если он получит больше голосов и будет вновь открыт, пожалуйста, укажите меня в комментарии.