А я уже на базовом уровне внедрил, и там всё оочень хорошо:
https://lists.apache.org/thread.html/9ca6acdedb03da4e49ed5fdaf44fad770e0467beb3dd4d4913e1f70d@%3Cdev.jmeter.apache.org%3EСмысл в следующем: JMeter используют для генерации нагрузки обычные потоки.
И очень часто нагрузка должна быть осмысленная. Т.е. не просто нужно молотить непрерывно, а важно делать паузы между запросами, эмулируя действия реального пользователя, который иногда думает между кликами (по 5-10 секунд запросто).
Получается, если мы заходим эмулировать нагрузку от 50’000 условных пользователей, то в обычном JMeter’е нужно 50’000 тредов. И, да, большую часть времени эти потоки будут спать в sleep’ах.
В случае корутин же столько потоков не нужно. Да, «локальное состояние каждого псевдо-потока хранить всё равно нужно». Но вот тредов нужно меньше.
Что я и сделал: впилил корутины в JMeter и на тесте в 100’000 «потоков с паузами по 1сек» он прямо в JMeter UI показывает 97’000 requests/second.
При этом, само подключение корутин заняло меньше дня. Поменял sleep на delay и добавил suspend по вкусу (да, один класс пришлось переписать на Java, но IDEA хорошо сконвертировала).
Потом несложно (надеюсь) будет перейти на асинхронынй HTTP клиент. И тогда «время ответа сервера» тоже не будет требовать «треда на стороне jmeter’а».
С точки зрения «бизнеса» :
1) Можно будет генерировать бОльшую нагрузку с одой нагрузочной машины. Это сильно упрощает написание скриптов и тестирование. Любая схема, когда нужно «запускать нагрузку с N машин, а потом как-то агрегировать логи» сложнее, чем «запустить с одной».
2) Можно будет использовать реалистичные паузы и не упираться в «unable to create native thread».
Как-то так.