Задать вопрос

В чём преимущество асинхронных серверов перед PHP/nginx?

Здравствуйте.
Такой вопрос: в чем основное преимущество асинхронных серверов (Node.js, Python Tornado), фреймворков (Python Twisted) и т. д. перед связкой асинхронный сервер + любой язык программирования (или, как написано в заголовке, PHP). То есть мы получаем, что nginx собирает запросы от пользователей, а PHP обробляет их по очереди. В асинхронном сервере в единый момент времени обрабатывается столько запросов, сколько есть воркеров и в PHP/nginx точно также.

  • Вопрос задан
  • 11868 просмотров
Подписаться 14 Оценить 1 комментарий
Ответ пользователя rozhik К ответам на вопрос (5)
@rozhik

Такой вопрос: в чем основное преимущество асинхронных серверов ... перед связкой асинхронный сервер + любой язык
---
перед связкой асинхронный сервер + любой язык - не совсем понятно, что Вы имеете в виду. Асинхронный сервер или нет, это одно, а вот асинхронный или нет доступ к данным у ЯП - это совсем другое. Я уверен, что Вас больше интересует второе.

Вся прелесть, сложность и проблемы в асинхронном подходе возникают по одной и той-же причине. Результат на запрос приходит не сразу, а асинхронно. Это даёт огромное уменьшение времени отклика программы, если в ней используется результат нескольких не зависимых IO операций. Во всех остальных случаях синхронный подход проще, при таком-же времени доставки ответа. (IO - это работа с файлами, внешними api итп )

Nodejs имеет один существенный недостаток - у неё один процесс выполнения. По этому тяжелые вычисления на ней значительно уступают в производительности PHP на многопроцессорных/ядерных системах. (это дело легко обходится воркерами итп, но это еще один недостаток)
erlang, java и несколько других языков не имеют вышеуказанной проблемы.

Nodejs по сравнению с PHP имеет еще 2 важных плюса:
1. в ноде можно хранить данные, таймеры, дескрипторы итп между запросами. По этому это намного эффективнее различных механизмов кэширования PHP.
2. в ноде не тратится время на подгрузку кода.

>>В асинхронном сервере в единый момент времени обрабатывается столько запросов, сколько есть воркеров и в PHP/nginx точно также.
Не верно, ни в первом ни во втором случае. В асинхронном сервере есть всего один поток, который обрабатывает любое количество запросов, в nginx - точно так-же. О PHP - другая история, но на каждый запрос нужен как минимум thread или process.

Ответ написан