Возможно, это то, что вы ищете:
var threadTest = function(durationMs, outputFkt, outputInterval) {
var startDateTime = (new Date()).getTime();
counter = 0,
testDateTime = null,
since = 0,
lastSince = -1;
do {
testDateTime = (new Date()).getTime();
counter++;
since = testDateTime - startDateTime;
if(typeof outputFkt != 'undefined' && lastSince != since && testDateTime % outputInterval == 0) {
outputFkt(counter, since);
lastSince = since;
}
} while(durationMs > since);
if(typeof outputFkt != 'undefined') {
outputFkt(counter, since);
}
return counter;
}
Этот метод будет просто повторять проверку в цикле
durationMS - duartion it should run in miliseconds
OPTIONAL:
outputFkt - a callback method, for logging purpose function(currentCount, milisecondsSinceStart)
outputInterval - intervall the output function will be called
Я подумал, что, поскольку вы не хотите тестировать реальную функцию, и даже NP-сложные задачи имеют соотношение между длиной ввода и временем, это может быть простым способом. Вы можете измерить производительность с любым интервалом и, конечно же, получить количество циклов в качестве возвращаемого значения, поэтому вы можете легко измерить, насколько потоки мешают производительности друг друга, с обратным вызовом даже для каждого цикла.
В качестве примера, вот как я это назвал (здесь используются jQuery и Dom, но, как вы видите, необязательно)
$(document).ready(function() {
var outputFkt = function(counter, since) {
$('body').append('<p>'+counter+', since '+since+'</p>');
};
threadTest(1000, outputFkt, 20);
});
Последнее предупреждение: Конечно, эта функция не может быть более точной, чем сам JS. Поскольку современные браузеры могут выполнять гораздо больше, чем один цикл за одну миллисекунду, будет обрезан небольшой хвост.
Обновить
Размышляя об этом... на самом деле использование обратного вызова ouputFkt
не только для вывода, но и для более глубокого понимания. Вы можете передать метод, который использует некоторые общие свойства, или вы можете использовать его для проверки большого использования памяти.
person
FloydThreepwood
schedule
20.10.2011