JS是單執行緒
JavaScript語言的一大特點就是單執行緒,也就是說,同一個時間只能做一件事,
這是因為Javascript這門腳本語言誕生的使命所致——JavaScript是為處理頁面中用戶的互動,以及操作DOM而誕生的,比如我們對某個DOM元素進行添加和洗掉操作,不能同時進行,應該先進行添加,之后再洗掉,
單執行緒就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務,
這樣所導致的問題是:如果JS執行的時間過長,這樣就會造成頁面的渲染不連貫,導致頁面渲染加載阻塞的感覺,
同步和異步
為了解決這個問題,利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個執行緒,于是,JS中出現了同步和異步,
本質區別: 這條流水線上各個流程的執行順序不同,
同步:
前一個任務結束后再執行后一個任務,程式的執行順序與任務的排列順序是一致的、同步的,
比如做飯的同步做法:我們要燒水煮飯,等水開了(10分鐘之后),再去切菜,炒菜,
異步:
你在做一件事情時,因為這件事情會花費很長時間,在做這件事的同時,你還可以去處理其他事情,
比如做飯的異步做法,我們在燒水的同時,利用這10分鐘,去切菜,炒菜,
console.log(1);
setTimeout(function() {
console.log(3);
}, 0);
console.log(2);
同步任務:
同步任務都在主執行緒上執行,形成一個執行堆疊,
異步任務:
JS 的異步是通過回呼函式實作的,
一般而言,異步任務有以下三種型別:
- 普通事件,如 click、resize 等
- 資源加載,如 load、error 等
- 定時器,包括 setInterval、setTimeout 等
異步任務相關回呼函式添加到任務佇列中(任務佇列也稱為訊息佇列),

執行機制
- 先執行執行堆疊中的同步任務,
- 異步任務(回呼函式)放入任務佇列中,
- 一旦執行堆疊中的所有同步任務執行完畢,系統就會按次序讀取任務佇列中的異步任務,于是被讀取的異步任務結束等待狀態,進入執行堆疊,開始執行,


由于主執行緒不斷重復獲得任務、執行任務、再獲取任務、再執行,所以這種機制被稱為事件回圈( event loop),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/167668.html
標籤:JavaScript
上一篇:jQuery閉包理解
下一篇:JavaScript5秒跳轉頁面
