2014-10-03 63 views
0

假設我有一臺16核心的機器,並且我想讓一個Node.js Web服務器使用8個內核,並且我希望Java REST/API服務器使用另一個8 。即使API服務器可能處理來自其他地方的請求,Node也會通過本地主機進行API調用。Node.js集羣模塊:與其他進程共享內核不重疊

我正在使用Node的集羣模塊來完成此操作;基本上,做cluster.fork() 8倍。我假設Java有自己的方式來利用X核心,但其他人正在編寫該軟件。

從節點的角度來看,我需要做些什麼來確保我的代碼不能在Java運行的任何相同內核上運行?似乎很簡單,運行fork() n/2次,其中n = numCpus,如果這就是我所需要擔心的,很好,但我想問這個問題以確保我不會錯過重要的東西。

+0

在node.js中,您可以分叉n/2次。但是更大的問題將是如果Java中的nodejs使用哪些n/2核心,那麼通過java可以完全相同。 :) – mithunsatheesh 2014-10-03 17:33:49

+0

運行'fork()'會產生一個新的進程,是的,但沒有可行的方法來保持核心進程而不使用某種虛擬化。 – 2014-10-03 17:59:28

回答

1

這是內核調度程序管理這個,但你可以通過設置processor affinity給內核一些提示。例如,在Linux上,您可能可以使用taskset爲每個啓動的進程設置進程關聯。

+0

我明白了。謝謝。你是否對處理器親和力暗示是否是多進程軟件部署經常完成的事情感興趣?還是更多地是最後的手段?除非事情似乎沒有正常工作,否則我傾向於在這一點*不使用它。 – greim 2014-10-03 18:20:48

+0

(標記爲「處理器親和力」是我所期待的術語,並開闢了更多谷歌搜索結果。) – greim 2014-10-03 18:23:15