Мое основное понимание coroutines in Tornado заключается в том, что они должны помочь масштабировать сервер API, особенно с точки зрения обработки параллельных запросов, для каждого из которых требуется значительное количество времени. Тем не менее, в простой тестовой нагрузке, которую я установил, кажется, что использование сопрограмм на самом деле хуже, чем использование простых функций блокировки ...Торнадо хуже с сопрограммами против без?
Ниже приведены два скриншота, показывающие время отклика API с использованием уровня параллелизма нагрузки 4 (т. Е. 4 саранчи или «пользователи»). Конечная точка/v1 использует простые вызовы функций блокировки, а конечная точка/v2 использует tornado.gen.coroutine
. Я ожидал, что среднее время отклика для GET/v2/info будет значительно ниже, чем для GET/v1/info, но на самом деле среднее время отклика на самом деле составляет выше.
Я чувствую, что я либо делаю что-то неправильное или непонимание фундаментальной концепции. Может ли кто-нибудь сказать мне, почему мой примерный проект показывает цифры выше? Где API на стороне coroutine хуже работает при параллельной нагрузке, чем простой API?
Пример tornado-loadtest
проекта: https://github.com/martyychang/tornado-loadtest
Спасибо за информацию, Бен. Итак, если я правильно понял ваш ответ: если вместо вычисления в памяти медленная операция заключалась в том, чтобы загрузить большой-й-файл из Интернета, сопрограммы могли бы быть полезны? –
Да, это так. –