2015-03-19 140 views
3

衆所周知,node.js內部處理異步調用,程序員從不需要關心後臺發生了什麼。據我所知,即使每個人都說node.js只是單線程,內部的v8/libuv庫也會產生線程來處理程序的異步片段的執行。Node.js異步呼叫處理和多核心縮放

我的問題是如果這些線程產生了,它們是否擴展了多核架構?我的意思是如果我有一個具有4個內核的CPU,並且我的主節點線程正在其中一個CPU上運行,那麼這些內部產生的線程是否會擴展到另外三個CPU,而不是保留在同一個CPU上。理論上他們應該擴展,但是因爲大家都說node.js開箱即用不使用多核,所以我認爲這值得提問。

回答

2

Node.js處理每進程一個線程。爲了擴展到多核,您需要運行多個Node.js服務器,每個核心服務器一個,並在它們之間拆分請求流量。

+0

one-thread-per-process:我不認爲這個短語理解正確。有一個進程(節點進程),它是線程(主節點線程),但在進程中會產生更多的線程來處理異步調用。爲什麼任何人都需要像v8和libuv這樣的線程庫,如果一切只用一個線程來處理的話? – ralzaul 2015-03-19 13:59:02

+0

Node.js只能在單線程執行,這實際上意味着它通過基於事件循環的單線程執行所有操作。如果您希望node.js使用單個處理器的多個內核,則使用羣集。 – Pragya 2015-03-19 16:12:38

+0

此外,v8提供了強大的多線程環境,因此不要將其與多個核心混合使用 – Pragya 2015-03-19 16:22:47