官术网_书友最值得收藏!

1.2 Node.js的運行原理

我們已經了解了Node.js組成部分各自的面貌。現在來看看它們是如何相互協作以提供強大的網絡服務功能。Node.js系統如圖1-2所示。

圖1-2

Node.js應用啟動時,會開啟JS線程(主線程)、由libuv提供的線程池(Worker Threads)和一個事件循環(Event Loop)。JS線程負責執行應用代碼,當發現有I/O操作時,直接提交給libuv的線程池并注冊回調函數,不會等待I/O結束后再繼續運行,而是拿到一個狀態后繼續執行,這就是“單線程非阻塞I/O”。

I/O操作結束之后會有一個事件,該事件會放在事件隊列(Event Queue)中,事件循環每次都會檢查是否有事件需要處理,如果有就處理,否則進行下一輪輪詢;如果沒有任何事件需要處理則退出進程。這就是“事件驅動”。

在I/O密集型應用中,主線程只負責提交任務,輪詢結果,耗時的任務執行部分會提交給底層執行,這就是Node.js為什么會有如此高性能的原因。

主站蜘蛛池模板: 黄梅县| 台北市| 抚顺县| 理塘县| 龙口市| 余江县| 黄梅县| 西和县| 南阳市| 同江市| 高清| 全南县| 七台河市| 屏东市| 湖北省| 垦利县| 尼玛县| 北辰区| 双辽市| 灯塔市| 丰台区| 旺苍县| 弥勒县| 德格县| 青田县| 崇阳县| 内江市| 平果县| 马尔康县| 历史| 大庆市| 瑞金市| 柳河县| 拉孜县| 泽库县| 宁乡县| 九江县| 沁水县| 安多县| 高淳县| 临江市|