2015-07-02 16 views
0

對不起,我不認爲這個問題的標題特別好,我努力爲我的多個問題創建一個合適的問題。爲什麼在node.js中有一個等同於cpu核心的工作人員呢?

我知道每個CPU核心有一個節點進程是在使用node.js時充分利用多核CPU的最佳方式。我現在明白,經過研究發現,由於cpu必須在多個進程之間進行上下文切換,因此每個內核運行超過一個是低效的。那麼每當我看到有關如何在node.js中使用內置集羣模塊的代碼時,主工人就會創建大量等於核心數量的工作人員,因爲這意味着您需要在一個8核心機器(1個主進程和8個工作進程)?這是因爲主進程通常在那裏只是爲了重啓工作進程,如果他們崩潰或結束,因此沒有多大意義,因爲它與另一個節點進程共享一個cpu核心?

如果我在作爲服務器控制面板的主節點進程上運行本地託管的網頁,那會好嗎?將這個網頁運行在單獨的工作人員身上並讓主進程只處理重生的工作人員會更好嗎?或者我應該有7個工人,而不是8個工人,所以主工人有一個完整的CPU核心?

回答

1

在羣集模塊中,有兩種傳入連接的分發方法。在循環法(除了Windows之外的所有平臺上都是默認值)中,主進程接收傳入連接,然後將其分配給工作進程。假定大多數時間接受連接和分配的工作比實際工作進程所做的工作要小得多。所以,如果你有8個核心,並且有1個主人和7個工人,那麼大部分時間1個主進程將閒置,因此一個核心將閒置。因此,通過實際使用1個主控制器和8個工作者,您可以從CPU中獲得更多的性能,並在所有員工繁忙且發生新的傳入連接時讓操作系統進行切換。理論上說,這比使一個內核大部分時間閒置都更好。

在集羣模塊使用的其他調度算法中,每個子進程直接偵聽傳入連接,主進程再次執行的次數更少,因此創建儘可能多的工作線程以及有核心進程是有意義的。

+0

感謝您的回覆,幾乎可以說我需要知道的一切 –

相關問題