node.js如何充分利用多核cpu
概述
Nodejs是基于chrome瀏覽器的V8引擎構(gòu)建的,也就說明它的模型與瀏覽器是類似的。我們的JavaScript會運行在單個進程的單個線程上。
但是V8引擎的單進程單線程并不是完美的結(jié)構(gòu),現(xiàn)如今CPU基本上都是多核的。真正的服務(wù)器往往有好幾個CPU(像我們的線上物理機有12個核),所以,這就將拋出Nodejs實際應(yīng)用中的一個問題:“如何充分利用多核CPU服務(wù)器?”
從嚴(yán)格意義上來講,Node其實并不是真正的單線程架構(gòu),因為Node自身還有I/O線程存在(網(wǎng)絡(luò)I/O、磁盤I/O),這些I/O線程是由更底層的libuv處理,這部分線程對于JavaScript開發(fā)者來說是透明的。JavaScript代碼永遠(yuǎn)運行在V8上,是單線程的。所以表面上來看NodeJS是單線程的。
node.js充分利用多核cpu的方法
面對單進程單線程對多核使用率不高的問題,按照之前的經(jīng)驗,每個進程各使用一個CPU即可,以此實現(xiàn)多核CPU的利用。Node提供了child_process模塊,并且也提供了fork()方法來實現(xiàn)進程的復(fù)制(只要是進程復(fù)制,都需要一定的資源和時間。Node復(fù)制進程需要不小于10M的內(nèi)存和不小于30ms的時間)。
這樣的解決方案就是*nix系統(tǒng)上最經(jīng)典的Master-Worker模式,又稱為主從模式。
這種典型并行處理業(yè)務(wù)模式的分布式架構(gòu)具備較好的可伸縮性(可伸縮性實際上是和并行算法以及并行計算機體系結(jié)構(gòu)放在一起討論的。某個算法在某個機器上的可擴放性反映該算法是否能有效利用不斷增加的CPU。)和穩(wěn)定性。
主進程不負(fù)責(zé)具體的業(yè)務(wù)處理,而是負(fù)責(zé)調(diào)度和管理工作進程,工作進程負(fù)責(zé)具體的業(yè)務(wù)處理,所以,工作進程的穩(wěn)定性是開發(fā)人員需要關(guān)注的。
通過fork()復(fù)制的進程都是一個獨立的進程,這個進程中有著獨立而全新的V8實例。雖然Node提供了fork()用來復(fù)制進程使每個CPU內(nèi)核都使用上,但是依然要記住fork()進程代價是很大的。好在Node通過事件驅(qū)動在單個線程上可以處理大并發(fā)的請求。
注意:這里啟動多個進程只是為了充分將CPU資源利用起來,而不是為了解決并發(fā)問題。
Node創(chuàng)建子進程的4種方式
1、spawn()
創(chuàng)建一個子進程來執(zhí)行命令
2、exec()
創(chuàng)建一個子進程來執(zhí)行命令,和spawn()不同的是方法參數(shù)不同,它可以傳入回調(diào)函數(shù)來獲取子進程的狀態(tài)
3、execFile()
啟動一個子進程來執(zhí)行指定文件。注意,該文件的頂部必須聲明SHEBANG符號(#!)用來指定進程類型。
4、fork()
和spawn()類似,不同點在于它創(chuàng)建Node的子進程只需要執(zhí)定要執(zhí)行的JavaScript文件模塊即可。
注意:后面的3種方法都是spawn()的延伸應(yīng)用。
以上就是node.js如何充分利用多核cpu的詳細(xì)內(nèi)容,更多關(guān)于node.js充分利用多核cpu的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
NodeJS學(xué)習(xí)筆記之Connect中間件應(yīng)用實例
前面我們介紹了幾篇內(nèi)容的connect中間件的基礎(chǔ)知識,今天我們來實例應(yīng)用一下,做個記事本的小應(yīng)用,希望大家能夠喜歡。2015-01-01nodejs如何在package.json中設(shè)置多條啟動命令
這篇文章主要介紹了nodejs如何在package.json中設(shè)置多條啟動命令,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Nodejs Playwright 2Captcha 驗證碼識別實現(xiàn)自動登陸功能
日常工作當(dāng)中,為了提高工作效率,我們可能會寫腳本來自動執(zhí)行任務(wù),有些網(wǎng)站因為需要用戶登陸,所以腳本的自動登陸功能必不可少,這篇文章主要介紹了Nodejs Playwright 2Captcha 驗證碼識別實現(xiàn)自動登陸功能,需要的朋友可以參考下2024-05-05