站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        node可以開啟多線程嗎

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

        node可以開啟多線程嗎

        本教程操作環(huán)境:windows10系統(tǒng)、nodejs 12.19.0版本、Dell G3電腦。

        node可以開啟多線程嗎

        node可以開啟多線程

        我們都知道 Node.js 是以單線程的模式運行的,但它使用的是事件驅(qū)動來處理并發(fā),基于事件驅(qū)動、非阻塞I/O模型,充分利用操作系統(tǒng)提供的異步 I/O 進(jìn)行多任務(wù)的執(zhí)行,適合于 I/O 密集型的應(yīng)用場景,因為異步,程序無需阻塞等待結(jié)果返回

        NodeJS多線程的出現(xiàn)不為了提高并發(fā),而是為了充分提高CPU的利用率

        開多線程的幾種方式

        使用Node自帶的 child_process 模塊

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

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

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

        node可以開啟多線程嗎

        使用多進(jìn)程

        express

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

        npm intsall express –seve-dev

        extensionServer.js 使用express 創(chuàng)建 子服務(wù)

        const express = require("express"), //Express框架 app = express();  // api 先關(guān)接口 app.all('/userinfo', (req, res) => {   res.json({ name: '自夏', msg: '我在自夏 selfsummer' }) })  app.listen(4000, () => {  console.log(`子服務(wù)啟動成功`); })

        serve.js 先創(chuàng)建Express 多線程 服務(wù)

        const  { fork } = require("child_process"), express = require("express"), //Express框架 app = express();  const { pid, ppid } = require('process')  // api 先關(guān)接口 app.all('/123', (req, res, next) => {    console.log(`本次進(jìn)程id為: ${pid}`);   res.end(`本次進(jìn)程id為: ${pid}`) })  app.all('/456', (req, res, next) => {   console.log(`本次進(jìn)程id為: ${pid}`);   res.end(`本次進(jìn)程id為: ${pid}`) })   app.listen(3888, () => {  console.log(`服務(wù)器端啟動成功 父進(jìn)程 ${ppid} 當(dāng)前服務(wù)進(jìn)程id為 ${pid}`);  // 開啟多進(jìn)程  fork('extensionServer.js') })  module.exports = {   app,   express, };

        啟動服務(wù) 這個時候主服務(wù)和自服務(wù)都啟動好了

        node可以開啟多線程嗎

        訪問 Express 主服務(wù) 以及子服務(wù)地址都可成功

        cluster.js 把Express 服務(wù)改為集群

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

        const os = require('os'); const cluster = require('cluster'); const { log } = console; const express = require("express"); //Express框架  const app = express(); const processId = process.pid;  // 判斷當(dāng)前是否有主進(jìn)程 if (cluster.isMaster) { 	// 獲取當(dāng)前本機cpu核數(shù),開啟多線程   const cpus = os.cpus().length;   for (let i = 0; i < cpus; i++){     cluster.fork()   } 	//進(jìn)程已斷開連接	 	  cluster.on('disconnect', (worker) => { 	    console.log(`進(jìn)程號 #${worker.id} 已斷開`); 	  }); 	// 意外退出進(jìn)程 	cluster.on('exit', (worker, code, signal) => { 	      cluster.fork();   	});   } else { 	// 引用Express主服務(wù) 開啟主進(jìn)程     require('./server') }

        啟動集群服務(wù) node cluster

        當(dāng)然也可以在集群里面繼續(xù)開子進(jìn)程

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

        為什么會有多個 服務(wù)器端啟動成功 當(dāng)前服務(wù)進(jìn)程id為 xxx

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

        前面我們有判斷是否是有主進(jìn)程

        如果有主進(jìn)程就 使用 cluster 模塊 開啟 子進(jìn)程

        沒有就開啟進(jìn)程

        把Express 服務(wù)改為 默認(rèn)http 服務(wù)

        只需要更改server.js 文件內(nèi)容

        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 `進(jìn)程${pid} 很高興為你服務(wù)`;     case '/456':       return `進(jìn)程${pid} 很高興為你服務(wù)`;     default: return `沒有此接口`   }}server.listen(3889, () => {   console.log(`Server Started in process ${pid}`);})

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

        推薦學(xué)習(xí):《nodejs視頻教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产精品福利一区二区| 国产精品日韩深夜福利久久 | 精品午夜国产人人福利| 99精品视频在线观看| 亚洲欧美日韩国产精品影院 | 精品人妻少妇一区二区三区在线| 国产精品久久久久久一区二区三区| 亚洲国产精品18久久久久久| 国产亚洲精品拍拍拍拍拍| 久久国产精品99久久久久久老狼 | 久久精品九九亚洲精品| 亚洲精品第一国产综合境外资源| 国模和精品嫩模私拍视频| 四虎国产精品永久地址51| 99精品国产丝袜在线拍国语| 日韩精品无码久久久久久| 无码国产亚洲日韩国精品视频一区二区三区 | 亚洲精品无码久久不卡| 久久996热精品xxxx| 无码精品A∨在线观看| 日韩专区亚洲精品欧美专区| 黑人无码精品又粗又大又长| 国产99久久九九精品无码 | jizz国产精品| 99久久精品费精品国产| 亚洲国语精品自产拍在线观看| 久久国产精品一区二区| 91精品美女在线| 国产成人精品免费视频动漫| 91精品国产综合久久精品| 成人国产精品高清在线观看| 99精品国产在热久久无毒不卡| 91精品啪在线观看国产| 91精品国产福利尤物| 国产成人精品免费视频大| 久久国产精品久久精品国产| 亚洲精品性视频| 国产精品亚洲w码日韩中文| 国产微拍精品一区二区| 久久久亚洲精品蜜桃臀| 亚洲乱码日产精品a级毛片久久|