国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

單線程、事件循環和異步IO

2019-11-08 01:52:40
字體:
來源:轉載
供稿:網友

單線程

Node.js本身是多線程的,只是在解釋我們編寫的javascript代碼時是由一個線程完成的,而底層是采用了多線程的方式來處理各種I/O操作的。

事件循環

在Node.js啟動動時, 會創建一個類似于while(true)的循環,每執行一次循環體的過程稱為Tick,這個一直循環遍歷待處理事件的機制叫做事件循環機制。我的個人理解是遍歷內置的所有觀察者的實例對象。

異步I/O

Node.js執行異步I/O操作示意圖:

1:當執行IO操作時,Node.js底層會先創建觀察者對象 2:然后將觀察者對象加入到事件隊列中 3:成功后會立即返回,這樣就不會影響到Javascript線程的后續執行,就達到了異步IO的目的。 4-5-6由Node底層實現:當底層線程池獲取到有需要處理的I/O操作,便分配線程執行該操作,當執行完后釋放該線程,把該事件加入到已完成的I/O隊列中等待處理,這只是為了方便理解畫的示意圖。實際過程是:當主線程(我們編寫的Node.js代碼)有I/O操作時Node.js底層首先創建對應的觀察者對象(文件、網絡等請求)①,然后主線程直接返回繼續執行后續的代碼。同時Node.js遍歷所有的觀察者對象,并判斷是否需要進行I/O操作,如果有則分配線程進行I/O處理,處理完成后歸還線程,并設置觀察者的I/O操作執行狀態。當Node.js底層再次遍歷觀察者時,發現該對象的I/O操作執行狀態已完成,則通知主線程執行響應的回調函數。②

個人對①和②的理解為:Node.js底層在每個Tick過程中,取出的觀察者,判斷如果有待處理的I/O事件,則為其分配線程進行I/O處理,處理完后修改該觀察者的執行狀態;如果I/O事件的執行狀態已完成,則執行該對象綁定的回調函數。

參考資料: http://blog.csdn.net/xiangzhihong8/article/details/53954600?locationNum=13&fps=1

<深入淺出Node.js>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平和县| 新河县| 维西| 二手房| 藁城市| 紫金县| 巴楚县| 嵊泗县| 桂阳县| 衡阳市| 阳原县| 万宁市| 天镇县| 乌兰县| 溧水县| 来宾市| 泾阳县| 车致| 鹤庆县| 海晏县| 丰镇市| 新安县| 桐梓县| 大丰市| 奇台县| 施秉县| 内乡县| 云林县| 赤城县| 广宗县| 六安市| 蓝山县| 舞钢市| 宿州市| 方正县| 白银市| 车险| 虞城县| 游戏| 南雄市| 湟中县|