非同步:現在與將來 分塊的程式 可以把JavaScript 程式寫在單獨的js 文件中,這個程式是由多個塊組成的,這些塊 中只有一個是現在執行,其餘在撿來執行,最常見的塊單位是函數。 例如: function now() { return 21; } function later() { answer ...
非同步:現在與將來
分塊的程式
可以把JavaScript 程式寫在單獨的js 文件中,這個程式是由多個塊組成的,這些塊
中只有一個是現在執行,其餘在撿來執行,最常見的塊單位是函數。
例如:
function now() {
return 21;
}
function later() {
answer = answer * 2;
console.log("Meaning of life:", answer);
}
var answer = now();
setTimeout (later,1000); // Meaning of life: 42
現在:
function now() {
return 21;
}
function later() {...}
setTimeout(later,1000);
setTimeout(later,1000);
將來:
answer = answer * 2;
console.log("Meaning of life:", answer);
非同步控制台
事件迴圈
並行線程
非同步是現在和將來的時間間隙,而並行是關於能同時發生的事情。
並行計算最常見的的工具就是進程和線程,並行和線程獨立運行,並可能同時運行,
在不同的處理器,甚至不同的電腦上,但多個進程能夠共用單個進程的記憶體。
併發
兩個或多個“進程”同時執行就出現了併發,不管組成他們的單個運算是否並行執行
可以把併發看作“進程”及的並行,與計算級的並行相對。
非交互
兩個或多個“進程”在同一個程式內併發地交替運行它們的步驟/事件時,如果這些任務彼此不相關,就不一定需要交互。
交互
更常見的情況是,併發的“進程”需要相互交流,通過DOM 間交互。
協作
取到一個長期運行的進程,並將其分割成多個步驟或多批人,使其他併發“進程”有機會將自己的運算插入到事件迴圈隊列中交替運行。
任務
掛在事件迴圈隊列的每個tick 之後的一個隊列,在事件迴圈的每個tick 中,可能
出現非同步動作不會導致一個完整的新事件添加到新事件中,而會在當前的tick 的任務隊列末尾添加一個項目。
語句順序
代碼中語句的順序和JavaScript 引擎執行語句的順序並不一定一致。
JavaScript 引擎在編譯這段代碼之後,可能會發現通過重新安排這些語句的順序有可能提過速度。
回調
continuation(延續)
順序的大腦
執行與計劃
嵌套回調與鏈式回調
信任問題
五個回調的故事
省點回調