Подтвердить что ты не робот

Сравнение торнадо/витая - сельдерей - Gevent

У меня возникли проблемы с пониманием различий между этими тремя структурами:

Эти три фреймворка могут использоваться для одновременного запуска кода, но делать это по-разному, используя различное количество потоков/процессов или codestyle. Вот как я сейчас понимаю различия:

  • Tornado/Twisted использует асинхронный код, управляемый контуром ввода-вывода. Это позволяет запускать код в одном потоке (несколько потоков бесполезны, потому что если у вас есть неблокирующий код, это необязательно)
  • Celery использует систему на основе задач для асинхронного запуска кода, сам по себе код по-прежнему является синхронным. Существует основной процесс, который способен распределять различные задачи между другими работниками в разных процессах.
  • Gevent использует систему на основе потоков и порождает поток для обработки различных подключений.

Вопросы, которые у меня есть сейчас:

  • Правильно ли я понимаю эти рамки?
  • Основное различие между потоком и процессом заключается в том, что разные потоки используют одну и ту же память, а процессы - нет. Является ли один процесс обычно выполняемым на одном сервере? (И, таким образом, Celery трудно реализовать на небольшом сервере)
  • Если мы говорим о веб-приложениях и сокетах:

Tornado/Twisted Могут принимать (почти) любое количество сокетов, потому что они используют асинхронный код и ставят очередь запроса в цикле ввода/вывода.

Являются ли Celery/Gevent способными к этому? Нужно ли им создавать новый процесс/поток, чтобы иметь возможность принимать новый сокет?

Я пытаюсь выяснить, какая из этих технологий лучше всего подходит для создания веб-приложения в режиме реального времени.

4b9b3361

Ответ 1

  • Gevent использует greenlets вместо потоков в замкнутой схеме ввода-вывода, поэтому нет цикла реактора/ввода-вывода для запуска вручную в случай Twtisted/Tornado. У этого также есть способность к обезьянному патчу существующих библиотек для поддержки его событийной операции, Tornado и Twisted требуют, чтобы определенные библиотеки работали со своими циклами событий, хотя вы найдете, что многие уже существуют.

    Сельдерей сделан гораздо больше для фоновой обработки, чтобы выгрузить дорогостоящие вычисления другому процессу/серверу.

  • Процессы могут совместно использовать память, но не так, как это делают потоки. Темы в CPython страдают от GIL и, как правило, не стоит использовать многопоточное решение, если вы делаете что-то интенсивное CPU.

    Я не уверен в требованиях к памяти Celery, но если вы используете 1 веб-процесс и 1 фоновый процесс, вы должны быть в порядке даже на 256 Мб VPS, хотя лучше, если вы поддерживаете многие подключения.

    /li >
  • Количество сокетов, которые могут обрабатываться с помощью Tornado/Twisted/Gevent, скорее всего, будет ограничено количеством и частотой ввода-вывода для каждого сокета. Сокеты с низкой частотой/низкой пропускной способностью намного проще поддерживать большое количество параллельных подключений, поскольку они будут в основном бездействовать.

    Сельдерей все равно потребует некоторого приложения для прослушивания сокетов и обработки вызовов с помощью демона Celery. Он также поддерживает Gevent, поэтому при необходимости вы можете выполнять несколько задач.