對事件循環的一點理解
阿新 • • 發佈:2017-12-01
.post require 順序 this ref abcd his cti 如何
最近工作需要學習了解webworker-threads以應對Javascript多線程處理CPU密集型的可能性;參考文檔JavaScript多線程之二 Node.js中的Web Worker;
以下是自己的一次嘗試並引發的對於Javascript事件循環機制的一點理解
var Worker = require(‘webworker-threads‘).Worker; var worker = new Worker(function() { console.log(33333) postMessage(‘hello, I\‘m send before message‘); this.onmessage = function(event) { console.log(22222); postMessage(‘Hello, I\‘m listening‘); console.log(event.data); } }) worker.onmessage = function(event) { console.log(11111) console.log(event.data); } console.log(4444); worker.postMessage(‘hello‘);
輸出結果為:
4444
33333
22222
hello
11111
hello, I‘m send before message
11111
Hello, I‘m listening
那麽思考一下這個結果是如何產生的?
首先,確定Javascript是單線程事件循環機制,整體執行順序如下:
- 第一次主線程運行: 輸出 4444; 向we bworker發送信息’hello’;
- 事件循環第一次: 主線程發送的hello觸發子線程: 輸出 333333 -> 發送 ‘hello, I\’m send before message’ -> 輸出 22222 -> 發送 ‘Hello, I\’m listening’ -> 輸出hello;
- 事件循環第二次: 輸出11111 -> 輸出: ‘hello, I\’m send before message’;
- 事件循環第三次: 輸出11111; 輸出: ‘Hello, I\’m listening’
總結: 當前發送的事件觸發信號會在下一次事件循環時觸發.
對事件循環的一點理解