欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

node.js如何充分利用多核cpu

 更新時間:2021年04月28日 15:19:00   作者:淺笑·  
這篇文章主要介紹了node.js如何充分利用多核cpu,想了解node.js的同學(xué),可以參考下

概述

Nodejs是基于chrome瀏覽器的V8引擎構(gòu)建的,也就說明它的模型與瀏覽器是類似的。我們的JavaScript會運(yùn)行在單個進(jìn)程的單個線程上。

但是V8引擎的單進(jìn)程單線程并不是完美的結(jié)構(gòu),現(xiàn)如今CPU基本上都是多核的。真正的服務(wù)器往往有好幾個CPU(像我們的線上物理機(jī)有12個核),所以,這就將拋出Nodejs實(shí)際應(yīng)用中的一個問題:“如何充分利用多核CPU服務(wù)器?”

從嚴(yán)格意義上來講,Node其實(shí)并不是真正的單線程架構(gòu),因?yàn)镹ode自身還有I/O線程存在(網(wǎng)絡(luò)I/O、磁盤I/O),這些I/O線程是由更底層的libuv處理,這部分線程對于JavaScript開發(fā)者來說是透明的。JavaScript代碼永遠(yuǎn)運(yùn)行在V8上,是單線程的。所以表面上來看NodeJS是單線程的。

node.js充分利用多核cpu的方法

面對單進(jìn)程單線程對多核使用率不高的問題,按照之前的經(jīng)驗(yàn),每個進(jìn)程各使用一個CPU即可,以此實(shí)現(xiàn)多核CPU的利用。Node提供了child_process模塊,并且也提供了fork()方法來實(shí)現(xiàn)進(jìn)程的復(fù)制(只要是進(jìn)程復(fù)制,都需要一定的資源和時間。Node復(fù)制進(jìn)程需要不小于10M的內(nèi)存和不小于30ms的時間)。

這樣的解決方案就是*nix系統(tǒng)上最經(jīng)典的Master-Worker模式,又稱為主從模式。

這種典型并行處理業(yè)務(wù)模式的分布式架構(gòu)具備較好的可伸縮性(可伸縮性實(shí)際上是和并行算法以及并行計(jì)算機(jī)體系結(jié)構(gòu)放在一起討論的。某個算法在某個機(jī)器上的可擴(kuò)放性反映該算法是否能有效利用不斷增加的CPU。)和穩(wěn)定性。

主進(jìn)程不負(fù)責(zé)具體的業(yè)務(wù)處理,而是負(fù)責(zé)調(diào)度和管理工作進(jìn)程,工作進(jìn)程負(fù)責(zé)具體的業(yè)務(wù)處理,所以,工作進(jìn)程的穩(wěn)定性是開發(fā)人員需要關(guān)注的。

通過fork()復(fù)制的進(jìn)程都是一個獨(dú)立的進(jìn)程,這個進(jìn)程中有著獨(dú)立而全新的V8實(shí)例。雖然Node提供了fork()用來復(fù)制進(jìn)程使每個CPU內(nèi)核都使用上,但是依然要記住fork()進(jìn)程代價是很大的。好在Node通過事件驅(qū)動在單個線程上可以處理大并發(fā)的請求。

注意:這里啟動多個進(jìn)程只是為了充分將CPU資源利用起來,而不是為了解決并發(fā)問題。

Node創(chuàng)建子進(jìn)程的4種方式

1、spawn()

創(chuàng)建一個子進(jìn)程來執(zhí)行命令

2、exec()

創(chuàng)建一個子進(jìn)程來執(zhí)行命令,和spawn()不同的是方法參數(shù)不同,它可以傳入回調(diào)函數(shù)來獲取子進(jìn)程的狀態(tài)

3、execFile()

啟動一個子進(jìn)程來執(zhí)行指定文件。注意,該文件的頂部必須聲明SHEBANG符號(#!)用來指定進(jìn)程類型。

4、fork()

和spawn()類似,不同點(diǎn)在于它創(chuàng)建Node的子進(jìn)程只需要執(zhí)定要執(zhí)行的JavaScript文件模塊即可。

注意:后面的3種方法都是spawn()的延伸應(yīng)用。

以上就是node.js如何充分利用多核cpu的詳細(xì)內(nèi)容,更多關(guān)于node.js充分利用多核cpu的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Node.js中的process.nextTick使用實(shí)例

    Node.js中的process.nextTick使用實(shí)例

    這篇文章主要介紹了Node.js中的process.nextTick使用實(shí)例,nextTick函數(shù)有什么用、怎么用、和setTimeout有什么區(qū)別呢,本文就講解了這些知識,需要的朋友可以參考下
    2015-06-06
  • nodejs簡單讀寫excel內(nèi)容的方法示例

    nodejs簡單讀寫excel內(nèi)容的方法示例

    這篇文章主要介紹了nodejs簡單讀寫excel內(nèi)容的方法,簡單分析了nodejs常見的讀寫Excel模塊,并結(jié)合實(shí)例形式分析了nodejs讀寫Excel具體操作技巧,需要的朋友可以參考下
    2018-03-03
  • NodeJS學(xué)習(xí)筆記之Connect中間件應(yīng)用實(shí)例

    NodeJS學(xué)習(xí)筆記之Connect中間件應(yīng)用實(shí)例

    前面我們介紹了幾篇內(nèi)容的connect中間件的基礎(chǔ)知識,今天我們來實(shí)例應(yīng)用一下,做個記事本的小應(yīng)用,希望大家能夠喜歡。
    2015-01-01
  • 詳解Nodejs之靜態(tài)資源處理

    詳解Nodejs之靜態(tài)資源處理

    這篇文章主要介紹了詳解Nodejs之靜態(tài)資源處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • nodejs如何在package.json中設(shè)置多條啟動命令

    nodejs如何在package.json中設(shè)置多條啟動命令

    這篇文章主要介紹了nodejs如何在package.json中設(shè)置多條啟動命令,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Node.js進(jìn)程退出的深入理解

    Node.js進(jìn)程退出的深入理解

    NodeJS可以感知和控制自身進(jìn)程的運(yùn)行環(huán)境和狀態(tài),也可以創(chuàng)建子進(jìn)程并與其協(xié)同工作,這使得NodeJS可以把多個程序組合在一起共同完成某項(xiàng)工作,下面這篇文章主要給大家介紹了關(guān)于Node.js進(jìn)程退出的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • node跨域請求方法小結(jié)

    node跨域請求方法小結(jié)

    本篇文章主要介紹了node跨域請求方法小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Nodejs Playwright 2Captcha 驗(yàn)證碼識別實(shí)現(xiàn)自動登陸功能

    Nodejs Playwright 2Captcha 驗(yàn)證碼識別實(shí)現(xiàn)自動登陸功能

    日常工作當(dāng)中,為了提高工作效率,我們可能會寫腳本來自動執(zhí)行任務(wù),有些網(wǎng)站因?yàn)樾枰脩舻顷?所以腳本的自動登陸功能必不可少,這篇文章主要介紹了Nodejs Playwright 2Captcha 驗(yàn)證碼識別實(shí)現(xiàn)自動登陸功能,需要的朋友可以參考下
    2024-05-05
  • node-red File讀取好保存實(shí)例講解

    node-red File讀取好保存實(shí)例講解

    在本篇文章里小編給大家整理了關(guān)于node-red File讀取好保存的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們可以參考下。
    2019-09-09
  • Node.js下自定義錯誤類型詳解

    Node.js下自定義錯誤類型詳解

    在JavaScript里面,運(yùn)行過程中的錯誤的類型總是被人忽略,這篇文章給大家詳細(xì)介紹了如何在Node.js下自定義錯誤類型,對大家學(xué)習(xí)或者使用Node.js具有一定的參考借鑒價值,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10

最新評論