亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Generator與協程

Generator與協程

皈依舞 2019-02-08 18:35:18
上圖能否解釋JavaScript中,運用回調函數或事件監聽器實現異步編程時的原理?即JS引擎是單線程的,當遇到異步任務時,瀏覽器會調用其他線程來執行異步任務,當輔助線程得到結果時,將相應的回到函數推送到callback queue中,當主線程的同步任務執行完畢后,通過event loop不斷的將callback queue中的回調函數推入到主線程,從而完成相應的異步任務?主線程有自己的執行環境棧,那么輔助線程都有自己的執行環境棧嗎?ES6中Generator實現的異步編程,其原理是對協程的實現,那協程是什么意思?在上圖中有和協程相對應的地方嗎?需要輔助線程嗎?看了很多文章,但零零散散的,感覺越看越糊涂,希望大??梢灾更c一下....謝謝...
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

lz的圖解釋的還算清楚了。不過可能在理解上面會稍微復雜一些了。
異步任務,例如ajax請求,各種請求資源,延時操作等等,其實都是在輔助線程上進行監聽,如果完成,則進入任務隊列,簡化一下其實可以直接理解為主線程的棧,然后順序執行。
輔助線程其實就只是一個監聽返回的功能。
ES6中的Generator的實現,類似于開了多進程,但是依然同時只能進行一個進程,與輔助線程不同。

用汽車和公路舉個例子。

  1. js公路只是單行道(主線程),但是有很多車道(輔助線程)都可以匯入車流(異步任務完成后回調進入主線程的任務隊列);

  2. generator把js公路變成了多車道(協程實現),但是同一時間只有一個車道上的車能開(依然單線程),不過可以自由變道(移交控制權)


查看完整回答
反對 回復 2019-02-12
  • 1 回答
  • 0 關注
  • 401 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號