Если это для nodejs, будет ли простая нить монитора? Я не знаю, как получить информацию о внутренностях очереди событий, но вы можете ввести трассировщик в очередь событий, чтобы контролировать, что потоки выполняются своевременно. (Это измеряет нагрузку не на количество потоков, которые еще не запущены, а на то, что потоки запускаются вовремя. То же самое, вид.)
Мониторная нить может переупорядочивать сама и проверять, что она вызвана по крайней мере каждые 10 миллисекунд (или любой возможный максимальный кумулятивный запрет ms). Поскольку nodej запускает потоки round-robin, если поток монитора был запущен вовремя, он сообщает нам, что все остальные потоки получили возможность запускать в этом же окне 10 мс. Нечто подобное (в узле):
// like Date.now(), but with higher precision
// the extra precision is needed to be able to track small delays
function dateNow() {
var t = process.hrtime();
return (t[0] + t[1] * 1e-9) * 1000;
}
var _lastTimestamp = dateNow(); // when healthMonitor ran last, in ms
var _maxAllowedDelay = 10.0; // max ms delay we allow for our task to run
function healthMonitor() {
var now = dateNow();
var delay = now - _lastTimestamp;
if (delaly > _maxAllowedDelay) {
console.log("healthMonitor was late:", delay, " > ", _maxAllowedDelay);
}
_lastTimestamp = now;
setTimeout(healthMonitor, 1);
}
// launch the health monitor and run it forever
// note: the node process will never exit, it will have to be killed
healthMonitor();
Троттлинг предупреждающих сообщений и поддерживать чистую остановку упражнения читателя.
Вы используете libuv как часть приложения node.js или автономного? –