Hexo多部署-同時部署到阿里雲OSS和Github
阿新 • • 發佈:2022-05-24
JavaScript是單執行緒的語言
JavaScript是一門單執行緒的程式語言。也就是說,同一時間只能做一件事情;
單執行緒執行任務佇列的問題:
如果前一個任務非常耗時,則後續任務就不得不一直等待,從而導致程式假死的問題
同步任務和非同步任務
為了防止某個耗時任務導致程式假死的問題,JavaScript把待執行的任務分為了兩類:
- 同步任務(synchronous)
- 又叫做非耗時任務,指的是在主執行緒上排隊執行的那些任務
- 只有前一個任務執行完畢,才能執行後一個任務
- 非同步任務(asynchronous)
- 又叫做耗時任務,非同步任務有JavaScript委託給
- 當非同步任務執行完成後,會通知JavaScript主執行緒執行非同步任務的回撥函式
同步任務和非同步任務的執行過程
總結EventLoop的基本概念
JavaScript主執行緒從“任務佇列”中讀取非同步任務的回撥函式,放在執行棧中依次執行。這個過程是迴圈不斷的,所以整個得這種執行機制又稱為EventLoop(事件迴圈)
例如:
import thenFs from 'then-fs' console.log(1); thenFs.readFile('./text/1.txt', 'utf8').then( res => { console.log(2); }) setTimeout(v => { console.log(3); },0) console.log(4);
正確的輸出結果:
其中:
- 1 和 4 屬於同步任務,會根據程式碼的先後順序依次被執行;
- 2 和 3 屬於非同步任務。他們的回撥函式會被加入到任務佇列中,等待主執行緒空閒時根據事件的迴圈機制進行再執行