91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

node可不可以開啟多線程

發布時間:2022-06-16 10:07:01 來源:億速云 閱讀:181 作者:zzz 欄目:web開發

本文小編為大家詳細介紹“node可不可以開啟多線程”,內容詳細,步驟清晰,細節處理妥當,希望這篇“node可不可以開啟多線程”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

node可以開啟多線程;可以利用node自帶的“child_process”模塊來開啟多線程,語法為“child_process.fork(modulePath[, args][, options])”;使用該模塊可以創建exec、execFile、spawn、fork四種類型的子進程。

本教程操作環境:windows10系統、nodejs 12.19.0版本、Dell G3電腦。

node可以開啟多線程嗎

node可以開啟多線程

我們都知道 Node.js 是以單線程的模式運行的,但它使用的是事件驅動來處理并發,基于事件驅動、非阻塞I/O模型,充分利用操作系統提供的異步 I/O 進行多任務的執行,適合于 I/O 密集型的應用場景,因為異步,程序無需阻塞等待結果返回

NodeJS多線程的出現不為了提高并發,而是為了充分提高CPU的利用率

開多線程的幾種方式

使用Node自帶的 child_process 模塊

child_process.fork(modulePath[, args][, options])

衍生新的 Node.js 進程并使用建立的 IPC 通信通道(其允許在父子進程之間發送消息)調用指定的模塊

cluster 集群模塊可以輕松創建共享服務器端口的子進程 ,工作進程使用 child_process.fork() 方法衍生

node可不可以開啟多線程

使用多進程

express

新建三個文件 server.js(express服務) cluster.js(多線程服務文件)extensionServer.js (express 子服務)
下面操作確保安裝 express

npm intsall express --seve-dev

extensionServer.js 使用express 創建 子服務
const express = require("express"), //Express框架
app = express();

// api 先關接口
app.all('/userinfo', (req, res) => {
  res.json({ name: '自夏', msg: '我在自夏 selfsummer' })
})

app.listen(4000, () => {
 console.log(`子服務啟動成功`);
})
serve.js 先創建Express 多線程 服務
const  { fork } = require("child_process"),
express = require("express"), //Express框架
app = express();

const { pid, ppid } = require('process')

// api 先關接口
app.all('/123', (req, res, next) => {
   console.log(`本次進程id為: ${pid}`);
  res.end(`本次進程id為: ${pid}`)
})

app.all('/456', (req, res, next) => {
  console.log(`本次進程id為: ${pid}`);
  res.end(`本次進程id為: ${pid}`)
})


app.listen(3888, () => {
 console.log(`服務器端啟動成功 父進程 ${ppid} 當前服務進程id為 ${pid}`);
 // 開啟多進程
 fork('extensionServer.js')
})

module.exports = {
  app,
  express,
};

啟動服務 這個時候主服務和自服務都啟動好了

node可不可以開啟多線程

訪問 Express 主服務 以及子服務地址都可成功

cluster.js 把Express 服務改為集群

使用 cluster集群模塊開啟多線程

const os = require('os');
const cluster = require('cluster');
const { log } = console;
const express = require("express"); //Express框架

const app = express();
const processId = process.pid;

// 判斷當前是否有主進程
if (cluster.isMaster)
{
	// 獲取當前本機cpu核數,開啟多線程
  const cpus = os.cpus().length;
  for (let i = 0; i < cpus; i++){
    cluster.fork()
  }
	//進程已斷開連接	
	  cluster.on('disconnect', (worker) => {
	    console.log(`進程號 #${worker.id} 已斷開`);
	  });
	// 意外退出進程
	cluster.on('exit', (worker, code, signal) => {
	      cluster.fork();
  	});


} else
{
	// 引用Express主服務 開啟主進程  
  require('./server')
}

啟動集群服務 node cluster

當然也可以在集群里面繼續開子進程

訪問二次(一個瀏覽器訪問,一個Postman 訪問)后接口
node可不可以開啟多線程

為什么會有多個 服務器端啟動成功 當前服務進程id為 xxx

應為 cluster 模塊在 當前主進程下面衍生子進程,每一個子進程是基于主進程的所有
衍生新的進程,進程之間是相互獨立的,每個進程都有自己的 V8 實例、內存,系統資源是有限的,不建議衍生太多的子進程出來,通長根據系統*
CPU 核心數*設置

前面我們有判斷是否是有主進程

如果有主進程就 使用 cluster 模塊 開啟 子進程

沒有就開啟進程

把Express 服務改為 默認http 服務

只需要更改server.js 文件內容

const http = require('http')const { pid, ppid } = require('process')const server = http.createServer((req, res) => {
  res.end(router(req.url))})const router = (url) => {
  switch (url)
  {
    case '/132':
      return `進程${pid} 很高興為你服務`;
    case '/456':
      return `進程${pid} 很高興為你服務`;
    default: return `沒有此接口`
  }}server.listen(3889, () => {
  console.log(`Server Started in process ${pid}`);})

依舊是啟動 cluster.js(多線程服務文件)
node可不可以開啟多線程

讀到這里,這篇“node可不可以開啟多線程”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

望奎县| 应城市| 津市市| 巨鹿县| 临汾市| 内乡县| 元阳县| 兴业县| 扶风县| 竹溪县| 营口市| 东乡族自治县| 中阳县| 抚顺县| 托克逊县| 东光县| 自贡市| 巴东县| 句容市| 子洲县| 苗栗市| 张家港市| 屯门区| 南岸区| 观塘区| 秭归县| 永寿县| 启东市| 衡东县| 泾川县| 繁昌县| 长岭县| 五指山市| 五寨县| 惠安县| 上蔡县| 芒康县| 河东区| 渭源县| 大悟县| 遵化市|