@websiller

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

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

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

Можно ли такого добиться в nodejs?
  • Вопрос задан
  • 1393 просмотра
Решения вопроса 1
Да. WebWorker'ы, кластеры
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 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
Если вы запустили тяжелый отчет, который думает минут пять, сто других пользователей могут в эти пять минут запустить по три своих скрипта. Они не будут ждать завершения вашего.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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