Ich untersuche Webworkers und Multithreading/Parallelität in JavaScript. Ich versuche, es mir selbst zu "beweisen", indem Sie die folgenden ProgrammeZwei JavaScript Webworker drucken nacheinander - Warum nicht gleichzeitig?
HTML
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Worker 2</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="main.js"></script>
</head>
<body>
</body>
</html>
main.js
var myFunction = function() {
worker = new Worker('worker.js');
worker.postMessage('cowboy');
for (var i=0; i<500; i++) {
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
var ms = d.getMilliseconds();
console.log("main: " + h + ":" + m + ":" + s + ":" + ms);
}
};
window.onload=myFunction;
worker.js läuft
self.addEventListener('message', receiveMessage);
function receiveMessage(e) {
for (var i=0; i<500; i++) {
var d = new Date();
var h = d.getHours(); // => 9
var m = d.getMinutes(); // => 30
var s = d.getSeconds(); // => 51
var ms = d.getMilliseconds();
console.log("worker: " + h + " " + m + ":" + s + ":" + ms);
}
}
Was passiert ist, dass alle console.log-Anweisungen von main.js zuerst gedruckt werden, dann alle console.log-Anweisungen von worker.js, z.
Was hätte ich gedacht, dass die Ausdrucke zum Beispiel durchsetzt sein würde
main: 21:50:10:707
worker: 21 50:10:708
main: 21:50:10:709
main: 21:50:10:710
worker: 21 50:10:711
worker: 21 50:10:712
worker: 21 50:10:713
main: 21 50:10:714
Warum passiert das nicht und gibt es eine Möglichkeit, dies wie oben zu demonstrieren?
Es könnte der "Konsolen" -Mechanismus sein, der als "Engpass" fungiert. – Pointy
@ Pointy Ja, es sieht so aus. – user1714161