JavaScript的同步與異步


1.手繪一張圖說明。

 

2.為什么JavaScript是單線程(這里引用阮一峰老師的話)

JavaScript的單線程,與它的用途有關。

作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。

這決定了它只能是單線程,否則會帶來很復雜的同步問題。

比如,假定JavaScript同時有兩個線程,一個線程在某個DOM節點上添加內容,另一個線程刪除了這個節點,這時瀏覽器應該以哪個線程為准?

所以,為了避免復雜性,從一誕生,JavaScript就是單線程,這已經成了這門語言的核心特征,將來也不會改變。

為了利用多核CPU的計算能力,HTML5提出Web Worker標准,允許JavaScript腳本創建多個線程,但是子線程完全受主線程控制,且不得操作DOM。

所以,這個新標准並沒有改變JavaScript單線程的本質。

傳送門:JavaScript 運行機制詳解:再談Event Loop

 

3.JavaScript的異步體現在哪

如一開始的圖,個人認為左邊主線程就是同步,左邊事件隊列(消息隊列)就是異步。

當然JavaScript中的異步有很多:

  • Ajax(XMLHttpRequest)
  • Image Tag,Script Tag,iframe(原理類似)
  • setTimeout/setInterval
  • CSS3 Transition/Animation
  • postMessage
  • Web Workers
  • Web Sockets
  • and more…

艾倫的博客中總結了幾種異步想法,傳送門:JavaScript中的異步梳理(0)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM