私は、WebワーカーとJavaScriptのマルチスレッド/並行性について検討しています。 私は、以下のプログラムに2人のjavascriptウェブワーカーが出力を連続して印刷します - なぜ同時にできませんか?
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
を実行することによって自分自身にそれを "証明" しようとしています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);
}
}
main.jsのすべてのconsole.logステートメントが最初に印刷され、次にworker.jsのすべてのconsole.logステートメントが印刷されます。私が思っただろう何
プリントアウトは、例えば散在するだろうということです
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
なぜこれが起こっていないのですか?上記のようにこれを示す方法はありますか?
「チョークポイント」として機能する 'console'メカニズムかもしれません。 – Pointy
@Pointyはい、そうだったようです。 – user1714161