У меня возникли проблемы с пониманием различий между этими тремя структурами:
Эти три фреймворка могут использоваться для одновременного запуска кода, но делать это по-разному, используя различное количество потоков/процессов или codestyle. Вот как я сейчас понимаю различия:
- Tornado/Twisted использует асинхронный код, управляемый контуром ввода-вывода. Это позволяет запускать код в одном потоке (несколько потоков бесполезны, потому что если у вас есть неблокирующий код, это необязательно)
- Celery использует систему на основе задач для асинхронного запуска кода, сам по себе код по-прежнему является синхронным. Существует основной процесс, который способен распределять различные задачи между другими работниками в разных процессах.
- Gevent использует систему на основе потоков и порождает поток для обработки различных подключений.
Вопросы, которые у меня есть сейчас:
- Правильно ли я понимаю эти рамки?
- Основное различие между потоком и процессом заключается в том, что разные потоки используют одну и ту же память, а процессы - нет. Является ли один процесс обычно выполняемым на одном сервере? (И, таким образом, Celery трудно реализовать на небольшом сервере)
- Если мы говорим о веб-приложениях и сокетах:
Tornado/Twisted Могут принимать (почти) любое количество сокетов, потому что они используют асинхронный код и ставят очередь запроса в цикле ввода/вывода.
Являются ли Celery/Gevent способными к этому? Нужно ли им создавать новый процесс/поток, чтобы иметь возможность принимать новый сокет?
Я пытаюсь выяснить, какая из этих технологий лучше всего подходит для создания веб-приложения в режиме реального времени.