我想在Node.js中使用child_process.fork
函數來產生一個新進程。該示例也適用於spawn
函數。Node.js子進程fork:CPU親和力
爲了確保這些子進程均勻利用機器上的所有內核,我希望設置它們的CPU關聯性,從而迫使它們遷移到期望的內核。
我知道如何在C和終端中做到這一點,但我怎麼會在Node.js中做到這一點?
我想在Node.js中使用child_process.fork
函數來產生一個新進程。該示例也適用於spawn
函數。Node.js子進程fork:CPU親和力
爲了確保這些子進程均勻利用機器上的所有內核,我希望設置它們的CPU關聯性,從而迫使它們遷移到期望的內核。
我知道如何在C和終端中做到這一點,但我怎麼會在Node.js中做到這一點?
我將在此前言說,設置處理器對處理器的親和力可能是一個壞主意。每個節點進程都有一些線程(JS運行的主要V8線程以及用於執行I/O和其他本地內容的libuv線程),並且將節點進程限制爲單個內核將會降低速度。
無所事事,讓操作系統調度程序處理您的分叉進程及其線程可能會產生更好的性能。
當然,真正知道的唯一方法是在負載下對系統進行基準測試。測試不同的負載水平(光,中,高),看看哪些性能更好。
我能想到的設置過程親和力的方式有兩種:
醜:使用exec()
運行taskset
設置你的進程親和力。 (使用process.pid
當前進程,或從fork()
返回ChildProcess
的pid
property。)
更好的方式:寫一本機綁定到平臺API。 (你怎麼用C做)This module似乎這麼做;是舊的,所以它可能會或可能不會工作。
這讓我覺得不好主意;讓操作系統調度程序做它的事情。至少試着對整個系統的性能進行基準測試,不管有沒有親和力。 (根據您的分叉過程如何工作,您可以嘗試手動更改終端中分叉pid的親和性,以用於測試此目的。) – josh3736
@ josh3736,嗯,它可能是。 –
@ josh3736,好主意。你如何得到過程的PID? –