node.js如何充分利用多核cpu
概述
Nodejs是基於chrome瀏覽器的V8引擎構建的,也就說明它的模型與瀏覽器是類似的。我們的javascript會執行在單個程序的單個執行緒上。
但是V8引擎的單程序單執行緒並不是完美的結構,現如今CPU基本上都是多核的。真正的伺服器往往有好幾個CPU(像我們的線上物理機有12個核),所以,這就將丟擲Nodejs實際應用中的一個問題:“如何充分利用多核CPU伺服器?”
從嚴格意義上來講,Node其實並不是真正的單執行緒架構,因為Node自身還有I/O執行緒存在(網路I/O、磁碟I/O),這些I/O執行緒是由RWpbTBSJml更底層的libuv處理,這部分執行緒對於javaScript開發者來說是透明的。JavaScript程式碼永遠執行在V8上,是單執行緒的。所以表面上來看NodeJS是單執行緒的。
node.js充分利用多核cpu的方法
面對單程序單執行緒對多核使用率不高的問題,按照之前的經驗,每個程序各使用一個CPU即可,以此實現多核CPU的利用。Node提供了child_process模組,並且也提供了fork()方法來實現程序的複製(只要是程序複製,都需要一定的資源和時間。Node複製程序需要不小於10M的記憶體和不小於30ms的時間)。
這樣的解決方案就是*nix系統上最經典的Master-Worker模式,又稱為主從模式。
這種典型並行處理業務模式的分散式架構具備較好的可伸縮性(可伸縮性實際上是和並行演算法以及平行計算機體系結構放在一起討論的。某個演算法在某個機器上的可擴放性反映該演算法是否能有效利用不斷增加的CPU。)和穩定性。
主程序不負責具體的業務處理,而是負責排程和管理工作程序,工作程序負責具體的業務處理,所以,工作程序的穩定性是開發人員需要關注的。
通過fork()複製的程序都程式設計客棧是一個獨立的程序,這個程序中有著獨立而全新的V8例項。雖然Node提供了fork()用來複制程序使每個CPU核心都使用上,但是依然要記住fork()程序代價是很大的。好在Node通過事件驅動在單個執行緒上可以處理大併發的請求。
注意:這裡啟動多個程序只是為了充分程式設計客棧將CPU資源利用起來,而不是為了解決併發問題。
Node建立子程序的4種方式
1、spawn()
建立一個子程序來執行命令
2、exec()
建立一個子程序來執行命令,和spawn()不同的是方法引數不同,它可以傳入回撥函式來獲取子程序的狀態
3、execFile()
啟動一個子程序來執行指定檔案。注意,該檔案的頂部必須程式設計客棧宣告SHEBANG符號(#!)用來指定程序型別。
4、fork()
和spawn()類似,不同點在於它建立Node的子程序只需要執定要執行的JavaScript檔案模組即可。
注意:後面的3種方法都是spawn()的延伸應用。
以上就是node.js如何充分利用多程式設計客棧核cpu的詳細內容,更多關於node.js充分利用多核cpu的資料請關注我們其它相關文章!