JavaScript 的一個比較明顯的特性就是 單線程
。即 JS 在執(zhí)行環(huán)境中是單線程的,所有任務按順序執(zhí)行下去
砂碉,后面必須等待前面任務執(zhí)行完成才能執(zhí)行。同步任務是按照時間線性排列下去的刻两。如:
console.log(1)
console.log(2)
console.log(3)
console.log(4)
// output
1
2
3
4
JavaScript 單線程
JavaScript 作為一個處理用戶交互增蹭,界面操作的腳本語言,為降低處理交互邏輯中同步處理邏輯的復雜性磅摹,單線程是誕生之初就已經決定的事滋迈。
如果多線程同步執(zhí)行,如用戶同時對同一個元素進行修改和刪除操作户誓,無法判斷以哪一個線程為主饼灿。
當然單線程的任務處理效率通常比多線程低,如果完成同步任務的時間過長帝美,可能還會造成應用程序無法響應碍彭,對于文檔處理之類的應用而言并不友好。
為提高CPU 的利用率证舟,JavaScript 提出了 WebWorker 的概念硕旗。允許 JavaScript 主線程創(chuàng)建多個子線程,但是子線程沒有 DOM 的操作權限女责,而且需要通過和主線程通信將消息通知到指定的處理程序漆枚,受主線控制。WebWorker 并沒有改變 JavasScript 單線程的本質抵知。
JavaScript 單線程不代表執(zhí)行環(huán)境單線程
JS 運行在瀏覽器環(huán)境墙基,JS 執(zhí)行環(huán)境是單線程的软族,但是瀏覽器環(huán)境并不是單線程的。瀏覽器環(huán)境還包括GUI渲染
残制,HTTP 請求處理
立砸,事件觸發(fā)
等等。