1. 程式人生 > 其它 >Hexo多部署-同時部署到阿里雲OSS和Github

Hexo多部署-同時部署到阿里雲OSS和Github

JavaScript是單執行緒的語言

             JavaScript是一門單執行緒的程式語言。也就是說,同一時間只能做一件事情;

 單執行緒執行任務佇列的問題:

  如果前一個任務非常耗時,則後續任務就不得不一直等待,從而導致程式假死的問題

同步任務和非同步任務

  為了防止某個耗時任務導致程式假死的問題,JavaScript把待執行的任務分為了兩類:

  1. 同步任務(synchronous)
    • 又叫做非耗時任務,指的是在主執行緒上排隊執行的那些任務
    • 只有前一個任務執行完畢,才能執行後一個任務
  2. 非同步任務(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 屬於非同步任務。他們的回撥函式會被加入到任務佇列中,等待主執行緒空閒時根據事件的迴圈機制進行再執行