為什麼JavaScript是單執行緒的?
阿新 • • 發佈:2018-11-04
文章目錄
一直都知道JavaScript是單執行緒的,可是不是很清楚為什麼是單執行緒的,為什麼不是多執行緒的,這樣可以提高效率啊?做筆試題的時候甚至還問JavaScript是單執行緒還是單程序,用一個程序來忽悠你。
為什麼JavaScript是單執行緒?
單執行緒:同一個時間只能做一件事
JavaScript的單執行緒,與他的用途有關。作為瀏覽器指令碼語言,JavaScript的主要用途是與使用者互動,以及操作DOM。這就決定了他只能是單執行緒,否則會帶來很複雜的同步問題。比如,假定JavaScript同時有兩個執行緒,一個執行緒在某個DOM節點上新增內容,另一個執行緒刪除了這個節點,這時瀏覽器應該以哪個執行緒為準?
為了利用多核CPU的計算能力,HTML5提出Web Worker 標準,允許JavaScript指令碼建立多個執行緒,但是子執行緒完全受主執行緒控制,且不得操作DOM。所以,這個新標準並沒有改變JavaScript單執行緒的本質。
JavaScript為什麼需要非同步
如果JS中不存在非同步,只能自上而下執行,如果上一行解析時間很長,那麼下面的程式碼就會被阻塞。對於使用者而言,阻塞就意味著"卡死",這樣就導致了很差的使用者體驗。
單執行緒如何實現非同步
通過事件迴圈(Event loop)來實現的。
參考我的這篇部落格 巨集任務、微任務