Показать сообщение отдельно
  #5 (permalink)  
Старый 29.04.2018, 14:37
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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%

Последний раз редактировалось j0hnik, 30.04.2018 в 00:07.
Ответить с цитированием