js事件循環

先了解如下這戲概念性的東西多線程

一、 單線程     :一個任務執行後再執行另外一個任務  
 
      多線程     :同時處理多個任務
 
二、 同步任務(阻塞)    :在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;
 
   異步任務(非阻塞):不進入主線程、而進入"任務隊列"的任務,只有"任務隊列"通知主線程,某個異步任務能夠執行了,該任務纔會進入主線程執行。
 
 js爲何選擇單線程?
    若是兩個線程同時操做同一個dom確定會發生衝突,而單線程完美的避免了這個問題。打個比方:一家公司有兩個老闆,a老闆讓員工往東,而b老闆讓員工往西,這時員工不知道該聽哪一個老闆的,淨剩下兩個老闆吵架了。而單線程就像是一個公司只有一個老闆,他讓往東就往東,往西就往西,不會有衝突
 
爲何要異步?
    若是單線程同步的話,像三十秒後關閉廣告這種操做,這三十秒期間沒法進行任何操做,由於線程一直在等待他的執行結果,等它執行完了才能繼續下面的操做
 
js事件循環就是以上問題的解決方案
    
  一、全部同步任務都在主線程上執行,造成一個執行棧。
  二、主線程以外,還存在一個"任務隊列"。只要異步任務有了運行結果,就在"任務隊列"之中放置一個任務。
  三、一旦"執行棧"中的全部同步任務執行完畢,系統會從任務列隊中,將有結果的任務放入主線程執行
  四、主線程不斷重複上面的第三步。
 
白話總結:
  先把電飯鍋插上就無論了,等個人菜炒完了再回來看看大米飯熟沒熟
相關文章
相關標籤/搜索