Как мое однопоточное приложение Rails обрабатывает параллельные запросы? - PullRequest
5 голосов
/ 01 апреля 2012

У меня есть однопоточное приложение Rails, работающее на тонком в однопоточном режиме на Heroku Cedar.

Хотя я выполняю огромный запрос POST (загрузка файла), который занимает более минуты, я могу одновременно выполнять и другие запросы GET.

Поддержка Heroku заверяет меня, что их уровень маршрутизации не хранит запрос, а затем отправляет его все сразу (это поведение многих прокси, таких как nginx). Они настаивают на том, что мое приложение обрабатывает параллельные запросы.

Что здесь происходит?

1 Ответ

6 голосов
/ 01 апреля 2012

Thin построен поверх EventMachine, который обеспечивает ввод-вывод на основе событий.

Это означает, что Thin выполняет асинхронный прием вашего запроса POST, одновременно обслуживая запросы GET.Когда данные POST загружены, Thin затем передает их в Rails (где они обрабатываются синхронно и блокируют другие запросы до завершения).

...