2014-12-05 60 views
0

如何使用Node.js和一個單一的CPU虛擬實例,如果我把一個工人線程和網絡線程在同一節點上,一個會阻止其他?我需要兩個CPU來並行運行嗎?一個Node.js線程阻塞另一個嗎?

+0

你是什麼意思了'worker'線程和'web'線是什麼意思? – loganfsmyth 2014-12-05 03:51:40

+0

它們只是兩個獨立的node.js進程。一個只處理,另一個處理Web請求。 – 2014-12-05 03:52:44

回答

0

是的,一會阻塞另一個如果所有同步代碼

因爲只有一個虛擬CPU實例(假設不超線程)中,在覈心層中,CPU只需要以同步方式操作的指令:1,隨後2,然後如圖3所示,然後4.

THEREFOR在理論上講,如果一個工人有這樣的事情,它會阻止:

while (true) { 
    doSomething(); 
} 

免責聲明:我不知道在操作系統內核是否會處理有關封鎖指令東西。

但是,Node.js會在事件循環中運行所有I/O,以及您明確聲明要在事件循環中運行的任務(process.nextTick(),setTimeout() ...)。事件循環的工作方式是很好地解釋here,所以我不會進入太多細節 - 然而,唯一阻止關於Node.js的部分是同步運行的代碼,像上面的例子。

所以,長話短說:既然你的網絡工作者使用的Node.js和http模塊是一個異步模塊,您的網絡工作者不會阻止。由於您的工作線程也使用Node.js,假設它執行事件發生時啓動的代碼(例如訪問您的網站),它不會阻止。

要運行同步完美並行編碼,您需要兩個CPU。然而,假設它是異步的,它應該在一個CPU上運行就好

相關問題