js怎樣可以實現多線程的效果嗎?
js怎樣可以實現多線程的效果嗎?
烙印99
2018-11-20 13:15:51
TA貢獻1895條經驗 獲得超3個贊
首先說一下JS的執行原理:js引擎執行js代碼的時候是單線程的,即同一時刻只會有一個進程執行JS代碼,回調函數也是一個一個執行的(按照事件發生的順序,而不是代碼的順序)。JS中的異步通信和定時是由另外的線程實現的,脫離js線程上下文。以JS定時操作舉例,當JS引擎執行setTimeout(callbackFunction, 100)操作時,它會通知定時線程我需要100毫秒的定時,之后JS引擎進入事件循環。100毫秒之后,定時引擎向事件隊列中加入一個時間已到的事件。JS引擎從隊列中讀取時間已到的事件,執行callbackFunction。 如果同一時間有多個事件加入事件隊列,JS引擎也只會一個一個的執行callback。對于異步也是同樣,JS代碼發起通信請求,通信線程執行通信操作,并在操作完成后將完成事件加入事件隊列。JS引擎從隊列中取出事件并調用回調處理通信結果。JS引擎在執行回調函數的時候,不能同時響應其他事件。
舉報