@websiller

Node js однопоточен, а php многопоточен?

Сервер на nodejs при подключении нового клиента вызывает коллбек в котором обрабатывается запрос. Если в коллбеке есть тяжелые вычисления, которые занимают много времени, то все остальные клиенты подключившиеся после будут поставлены в очередь в event loop и только после завершения текущего коллбека будет выполнен следующий.

В php же даже если в скрипте есть тяжелые вычисления, то два разных клиента будут обслужены параллельно, не дожидаясь выполнения друг друга.

Можно ли такого добиться в nodejs?
  • Вопрос задан
  • 1365 просмотров
Пригласить эксперта
Ответы на вопрос 5
@PloAl
Ваше первое утверждение не совсем корректно.
Если "тяжелом" коллбеке полностью синхронный код тогда верно. Если используется асинхронный код остальные запросы, ждать не будут.

В php для обработки каждого запроса запускается новый процесс.

Также для нескольких процессов можно использовать PM2.
Ответ написан
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Не путайте параллелизм и асинхронную модель. PHP из коробки однопоточен и параллелизм достигается через воркеров вебсервера. В Nodejs используются кластеры или же так же несколько воркеров на разных портах как бэкэнд для вебсервера. Ограничение по Nodejs - 1 процесс на ядро по понятным причинам.

Асинхронная модель есть и там и там, но в nodejs с ней попроще по тому как процесс умирает после обработки (если это не написанный демон)

Плюс nodejs в том что процесс запускается один раз, поэтому, пока процесс на PHP просыпается, Nodejs уже перешёл к следующему клиенту.

Про ручной деплой (писали выше) чушь. Давно уже существует тонна ci/cd систем, не говоря уже о мощностях serverless в AWS и Azure
Ответ написан
OnYourLips
@OnYourLips
В PHP по умолчанию используются процессы. Нода тоже в них умеет.
PHP так же, как и нода, умеет работать с асинхронщиной.
И в них обоих есть потоки Threads, но в обоих это сделано пока что плохо.
Ответ написан
@kuftachev
PHP однопоточен, но Nginx или Apache имеет определенное количество воркеров для обработки запросов.

В Node.js также можно запустить много экемпляров. Вопрос в пониманием того, что Вы делаете.

Ещё не стоит забывать, что можно использовать очереди для обработки тяжёлых вычислений, например, Вы получаете файл на сервер и ставите в очередь на обработку, а потом в отдельном процессе изменяете размер. Но это только пример, все зависит от задачи.
Ответ написан
@nic777
сам php однопоточен, но вебсервер может запустить несколько экземпляров php
Если вы запустили тяжелый отчет, который думает минут пять, сто других пользователей могут в эти пять минут запустить по три своих скрипта. Они не будут ждать завершения вашего.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы