簡體   English   中英

反應器模式在 Node.js 中是如何工作的?

[英]how does reactor pattern work in Node.js?

在此處輸入圖像描述

我正在閱讀 Node.js 設計模式。 我被困在對反應器模式的理解中。 我在這里看不到任何調用堆棧。 我認為調用堆棧是 Node.js 設計的主要部分之一。 誰能幫我理解這張圖? 此外,沒有回調隊列。

一切都從應用程序開始,應用程序發出請求,事件多路分解器收集這些請求,然后形成隊列,即事件隊列。 事件解復用器由 libuv 運行,它是一個異步 IO 庫,允許 Node.js 執行 I/O。

在圖中,您會看到一個事件隊列。 實際上不僅有 1 個事件隊列,還有 7 個基本隊列。 這些隊列具有升序優先級,事件循環首先檢查最高優先級的隊列。

定時器隊列具有最高優先級。 setTimeout 和 setInterval 函數在這里排隊。 一旦事件在這個隊列中完成,或者時間到了,事件循環將這些函數傳遞給調用堆棧,在圖中它被命名為執行處理程序。

一旦其中一個事件隊列完成,而不是跳轉到下一個隊列,事件循環首先將檢查其他 2 個隊列,這些隊列將其他微任務和 process.nextTick 函數排隊。 然后它會跳到下一個隊列。 此圖將幫助您可視化事件循環。 在此處輸入圖像描述

如果事件隊列中沒有事件或事件解復用器沒有掛起的請求,則程序將完成。

注意:提到的回調隊列是事件隊列,調用堆棧是執行處理程序。

  1. 應用程序通過向 Event Demultiplexer 提交請求來生成新的 I/O 操作。應用程序還指定一個處理程序,該處理程序將在操作完成時調用。 向 Event Demultiplexer 提交新請求是一個非阻塞調用,它會立即將控制權返回給應用程序。
  2. 當一組 I/O 操作完成時,Event Demultiplexer 將一組相應的事件推送到 Event Queue 中。
  3. 此時,事件循環遍歷事件隊列的項目。
  4. 對於每個事件,都會調用關聯的處理程序。
  5. 處理程序是應用程序代碼的一部分,在事件循環執行完成時將控制權交還給事件循環 (5a)。 在處理程序執行時,它可以請求新的異步操作 (5b),從而將新項目添加到事件多路分解器 (1)。
  6. 當事件隊列中的所有項目都處理完畢后,事件循環再次阻塞事件解復用器,然后當有新事件可用時觸發另一個循環。

歸功於 packtpub.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM