在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js異步任務(wù)從開始執(zhí)行到調(diào)用回調(diào)函數(shù)這段時間放到哪邊了?

js異步任務(wù)從開始執(zhí)行到調(diào)用回調(diào)函數(shù)這段時間放到哪邊了?

最近在研究event loop,看了不少前輩們的文章,前輩們都說主線程在執(zhí)行異步任務(wù)時,先發(fā)起調(diào)用,然后把它掛起,等他有返回值了放到任務(wù)隊(duì)列里等待主線程調(diào)用回調(diào)函數(shù)獲取返回值。
但是,我不明白怎么個掛起法?掛起時主線程執(zhí)行別的任務(wù)了,被掛起的異步任務(wù)在干嘛?在哪里?
比如ajax請求,接收服務(wù)器傳過來的數(shù)據(jù)時不需要線程運(yùn)行它嗎?
有沒有老哥知道的?求解。

回答
編輯回答
卟乖
  1. 主線程在執(zhí)行到異步調(diào)用時,將異步的代碼掛在瀏覽器內(nèi)核提供的異步線程去執(zhí)行,而主線程繼續(xù)執(zhí)行同步代碼。
  2. 異步線程執(zhí)行完成后將回調(diào)放在消息隊(duì)列中。
  3. 主線程通在消息隊(duì)列中通過事件循環(huán)從消息隊(duì)列中取出異步的回調(diào)再去執(zhí)行。

比如ajax請求。
js引擎執(zhí)行到ajax請求時,由瀏覽器新開線程來執(zhí)行這個XMLHttpRequest,而js引擎提供的主線程,會去消息隊(duì)列中循環(huán)查找回調(diào)來執(zhí)行。

基于個人理解答題,如有錯誤請直接指出,不吝賜教。

2017年12月14日 02:35
編輯回答
默念

這里應(yīng)該涉及到一個“事件觸發(fā)線程”的概念。
推薦閱讀從瀏覽器多進(jìn)程到JS單線程,JS運(yùn)行機(jī)制最全面的一次梳理
可能可以解決你的疑惑。

2017年10月13日 04:30