Я бы подошел к этому по протоколу. Дросселируйте, когда фактическое обслуживание требует этого, а не когда вы думаете, что это будет. Вместо того, чтобы беспокоиться о том, сколько обратных вызовов ожидает тик реактора, я бы беспокоился о том, сколько времени (например) HTTP-запросов занимает выполнение. Количество операций, ожидающих реактора, может быть деталью реализации - например, если один шаблон доступа заканчивался обратными вызовами на длинных списках DeferredLists, а другой имел более линейную цепочку обратных вызовов, время ответа может не отличаться, даже если количество обратных вызовов будет.
Это можно сделать, сохранив метрики времени для завершения логической операции (например, обслуживания HTTP-запроса). Преимущество этого заключается в том, что он дает вам важную информацию до того, как возникнет проблема.