我正在讀這本書。
它說 Node.js 的定義特性是其由默認異步 API 啟用的基于事件的單執行緒并發。
對我來說,單執行緒意味著 Node 一次只執行一件事。那么究竟是如何實作并發的呢?
另外,如果有人可以解釋上面的定義功能,那將是一個很大的幫助。
我還想要一些資源來解釋 Node.js 的內部作業原理。
我是 JavaScript 新手。
uj5u.com熱心網友回復:
Node.js(通常是 JavaScript)使用事件回圈來執行陳述句。這意味著異步代碼被推送到事件佇列的末尾。
事件回圈允許 Node.js 通過盡可能將操作卸載到系統內核來執行非阻塞 I/O 操作——盡管 JavaScript 是單執行緒的。
由于大多數現代內核都是多執行緒的,它們可以處理在后臺執行的多個操作。當這些操作之一完成時,內核會通知 Node.js,以便可以將適當的回呼添加到輪詢佇列中以最終執行。
事件回圈如下所示:
┌───────────────────────────┐
┌─>│ timers │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ pending callbacks │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
│ │ idle, prepare │
│ └─────────────┬─────────────┘ ┌───────────────┐
│ ┌─────────────┴─────────────┐ │ incoming: │
│ │ poll │<─────┤ connections, │
│ └─────────────┬─────────────┘ │ data, etc. │
│ ┌─────────────┴─────────────┐ └───────────────┘
│ │ check │
│ └─────────────┬─────────────┘
│ ┌─────────────┴─────────────┐
└──┤ close callbacks │
└───────────────────────────┘
每個階段描述為:
- 計時器:此階段執行由
setTimeout()和安排的回呼setInterval()。 - 掛起的回呼:執行推遲到下一個回圈迭代的 I/O 回呼。
- 空閑,準備:僅在內部使用。
- poll:檢索新的 I/O 事件;執行與 I/O 相關的回呼(幾乎所有回呼,關閉回呼、定時器調度的回呼和 setImmediate() 除外);節點會在適當的時候阻塞在這里。
- 檢查:
setImmediate()這里呼叫回呼。 - 關閉回呼:一些關閉回呼,例如
socket.on('close', ...).
更多細節在這里。
簡而言之,雖然 Node 的事件回圈是單執行緒的,但它會盡可能快地回圈通過這些階段,并留下其他行程(例如服務、外部程式等,通常通過套接字、管道等訪問)和 I/ O 通過pull和callback階段執行和提供回應的操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516549.html
上一篇:如何向用戶呼叫資料參考?
