Неблокирующий http-сервер, java nio, eventletlet python tornado - PullRequest
3 голосов
/ 17 февраля 2011

Привет Я пытаюсь понять, является ли http-сервер на основе торнадо / эвентлета лучше, чем нарезанный сервер. При изучении темы я вижу, что это однопотоковый базовый сервер событий, который запускает одну функцию-обработчик после select / poll / epoll on socket.

  • Мой первый вопрос: этот торнадо / эвентлет похож на библиотеку nio в java и является быстрым и неблокирующим java-сервером.
  • Мой второй вопрос заключается в том, что, поскольку этот сервер, основанный на событиях, является однопоточным. Если одно соединение блокируется на клиенте io или solw, будет зависать весь сервер
  • Мой третий вопрос: что за компромисс, если неблокирующий сервер быстрый, почему он не более распространенный, чем apache

Эти вопросы связаны, и я был бы признателен, так как я не правильно понимаю эти вопросы

Спасибо

1 Ответ

3 голосов
/ 19 февраля 2011

Неблокирующие серверы - лучший выбор, при условии, что все ваши библиотеки предоставляют неблокирующие apis.Как уже упоминалось в вашем втором вопросе, если библиотека блокирует (например, библиотека базы данных делает блокирующий вызов), весь процесс / поток блокируется и система зависает.Не все доступные библиотеки являются асинхронными, что затрудняет использование торнадо / eventlet для всех случаев использования.Также в многоядерном боксе необходимо запустить несколько экземпляров неблокирующих серверов, чтобы полностью использовать емкость бокса.

Серверы Tornado / Event аналогичны серверам на основе Java Java.Есть одно концептуальное различие между Торнадо и Eventlet.Торнадо следует схеме реактора, где один процесс ожидает события ввода-вывода (сокета) и отправляет их соответствующим обработчикам.Если обработчики неблокируют, можно ожидать наилучшей производительности.Обычно код, написанный для этих платформ, состоит из серии обратных вызовов, что делает его немного менее читаемым, чем синхронный сервер. Серверы Java NIO относятся к этой категории.

Eventlet выполняет ту же задачу, но с более чистым интерфейсом.Код может быть написан как в случае синхронного сервера без использования обратных вызовов.При обнаружении ввода-вывода Eventlet планирует другой процесс в пользовательском пространстве (неправильная терминология).

Веб-приложения Apache более популярны, чем те, по нескольким причинам

  • Написание синхронного кода относительно просто
  • Не все необходимые библиотеки являются асинхронными.

Но для написания приложения чата, которое обрабатывает множество соединений, многопоточный сервер не будет масштабироваться.Вы должны использовать асинхронные фреймворки, такие как twisted / event / Java NIO.

...