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