js Event Loop 事件循环
js Event Loop 事件循環(huán)
來源 :Loong Panda
概念
Event Loop即事件循環(huán),是解決javaScript單線程運行阻塞的一種機制。 主要是為了協(xié)調(diào)單線程下 ,事件、用戶交互 、腳本 、UI 渲染和網(wǎng)絡處理等行為 ,防止主線程的不阻塞。
因為JavaScript 是單線程,也就是說,所有任務需要排隊 ,前一個任務結(jié)束,才會執(zhí)行后一個任務。
但是IO設(shè)備(輸入、出設(shè)備)可能會因為網(wǎng)絡等因數(shù)導致速度很慢(比如Ajax)繼而CPU沒有充分利用 ,所以設(shè)計者將IO設(shè)備的任務掛起 ,先執(zhí)行后面的任務 ,等到IO設(shè)備返回了結(jié)果,再回過頭,把掛起的任務繼續(xù)執(zhí)行下去。于是 ,就把所有任務分成兩種 ,一種是同步任務(synchronous) ,另一種是異步任務(asynchronous)。
同步任務:
只有前一個任務執(zhí)行完畢,才能執(zhí)行后一個任務;直接在主線程上排隊執(zhí)行且最先執(zhí)行,形成一個執(zhí)行棧
異步任務:
不進入主線程 、而是進入"任務隊列"(task queue)的任務,只有"任務隊列"通知主線程,某個異步任務可以執(zhí)行了,該任務才會進入主線程執(zhí)行。
一