Время выполнения скрипта
var time = performance.now();
for(var i = 1000000000; i; i--) Math.random();
time = performance.now() - time;
console.log('Время выполнения = ', time);
Хромоподобные браузеры пыхтят 6900мс а FF показывает какие то фантастические 920мс это что за прикол? |
|
Что-то в хроме быстрей, что-то в ФФ, и порой очень сильно.
|
Цитата:
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<select>
<option>1 поток</option>
<option>2 потока</option>
<option>3 потока</option>
<option>4 потока</option>
<option>5 потоков</option>
<option>6 потоков</option>
<option>7 потоков</option>
<option>8 потоков</option>
<option>9 потоков</option>
<option>10 потоков</option>
<option>11 потоков</option>
<option>12 потоков</option>
<option>13 потоков</option>
<option>14 потоков</option>
<option>15 потоков</option>
<option>16 потоков</option>
<option>17 потоков</option>
<option>18 потоков</option>
<option>19 потоков</option>
<option>20 потоков</option>
</select>
<button>Старт</button>
<script>
var sel = document.querySelector('select');
document.querySelector('button').onclick = ()=> {
var potok = sel.selectedIndex+1, flag = 0,
time = performance.now(),
work = [], end = [];
for (var i = 0; i < potok; i++){
work[i] = new Worker(URL.createObjectURL(new Blob([workerRunner.toString().replace(/^function .+\{?|\}$/g, '')],{ type:'text/javascript' })));
end[i] = 0;
}
work.forEach((el,i)=>{
el.postMessage([potok, i]);
el.onmessage=e=>{
end[i] = e.data;
if(!end.includes(0)) {
el.terminate();
time = performance.now() - time;
console.log('Время выполнения = ', time);
}
};
});
};
function workerRunner() {
self.onmessage = e => {
w = 1000000000,
a1 = Math.floor(w/e.data[0]*e.data[1]),
a2 = Math.floor(w/e.data[0]*(e.data[1]+1));
for(var i = a1; i<a2; i++) Math.random();
self.postMessage(1);
};
}
</script>
</body>
</html>
результат радует 90-120 мс выполняется в FF (у меня) потоки лучше всего устанавливать в соответствии с количеством физических ядер Если установить максимальное количество потоков CPU грузится на 100% |
Цитата:
|
laimas,
В данном случае экспериментально так быстрей работает. |
Цитата:
Та же Windows не может эффективно использовать множество ядер, не говоря уже о приложениях. У меня в системе установлено всего одно приложение, которое эффективно загружает все 8 ядер системы, это Adobe Premiere. Но еще более прирост производительности получается когда это ПО задействует десятки ядер GPU, правда если видеокарта входит в список поддерживаемых. С недавних пор и браузеры стали использовать ядра GPU, если возможно, но чтобы они эффективно управляли ядрами CPU, что-то не слышал. |
Цитата:
Цитата:
Ну, а за лекцию спасибо =) |
j0hnik,
вы путаете многопоточность как эмуляцию распараллеливания задачи со множеством ядер, которые могут это делать. А насчет тысячи ядер, так на рынке и супер компьютеры есть, но вряд ли вы как перчатки можете поменять свою бюджетную видеокарту даже на более со скромным числом ядер, но производительную с нехилой ценой. Живите реалиями, зачем фантазировать. А графические ядра использовать легче уже потому, что существуют готовые программно-аппаратные комплексы. Ищите в сети - CUDA. |
| Часовой пояс GMT +3, время: 08:52. |