文章詳情頁
javascript - node中的事件輪詢和異步代碼的執行
瀏覽:94日期:2023-04-07 17:47:35
問題描述
node的主線程執行js代碼,當是一個異步操作時,node會交給libuv去執行,然后會去執行異步后面的代碼。當libuv執行完后,會放入一個循環隊列中,libuv會有一個類似while(true)的事件循環(Event Loop),這個事件循環存在于node的單線程(也就是主線程),主線程循環取事件執行回調函數。那么主線程的循環取事件和執行異步后面的代碼是怎樣的一個過程?一個線程不可能同時做兩件事,是執行完異步后面的代碼,cpu空閑時才會去循環取事件嗎?
問題解答
回答1:首先明確一點,主線程在有代碼執行時是不會去輪詢的。所以主線程會把所有的初始代碼(非回調代碼)執行完后再去事件隊列輪詢(事件隊列在被輪詢時可以看成一個js對象)因為理論上js引擎主線程,只能識別js代碼。但初始代碼執行完后,js主線程會去輪詢取事件,當取到一個回調函數后,js引擎會把當前回調代碼執行完后,才會在去輪詢??偨Y一下就是,只有js引擎在沒有代碼執行時,才會去進行輪詢,或者說,js主線程中永遠只有一個回調函數
回答2:覺得這篇文章能解決你的疑惑
標簽:
JavaScript
上一條:javascript - 為什么我的animation-fill-mode 設置不生效下一條:javascript - 想讓圖片上那個塊,在增加塊的寬度的時候向右邊移動,而不是向左邊移動。需要怎么解決?
相關文章:
1. node.js - webpack-dev-server正常運行,webpack打包卻出錯,怎么辦?2. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點3. 微信內網頁上傳圖片問題4. mysql - 瞬間流量很高的網站,要頻繁的插入數據到數據庫,應該怎么解決這個問題?5. python - angular route 與 django urls 沖突怎么解決?6. javascript - 關于行內元素onclick事件,為什么會出錯?7. javascript - 關于vuejs的v-for循環問題8. 輸入地址報以下截圖錯誤,怎么辦?9. javascript - 關于iscroll的一段代碼,希望有人解釋10.排行榜javascript - 關于iscroll的一段代碼,希望有人解釋 1. 輸入地址報以下截圖錯誤,怎么辦? 2. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點 3. mysql - 瞬間流量很高的網站,要頻繁的插入數據到數據庫,應該怎么解決這個問題? 4. boot2docker無法啟動 5. angular.js - angularJs ngRoute怎么在路由傳遞空字符串及用ng-switch取得 6. node.js - webpack-dev-server正常運行,webpack打包卻出錯,怎么辦? 7. python - angular route 與 django urls 沖突怎么解決? 8. 微信內網頁上傳圖片問題 9. javascript - 關于vuejs的v-for循環問題 10. 非root安裝MySQL5.6報錯,求助?。。?/a>