日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

node 多进程 vs java_node多进程服务器

發布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 node 多进程 vs java_node多进程服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

node提供了四種方法來創建子進程,分別是child_process.exec(),child_process.execFile(),

child_process.fork(),child_process.spawn()。他們都返回子進程對象。

exec:啟動一個子進程執行命令,并且有一個回調函數獲知子進程的狀況。并且可以設置超時時間。

execFile:啟動一個子進程文件,注意這里的文件不一定是js文件,node可以執行的文件,例如window下的

bat文件,等并且也有一個回調,并且可以設置超時時間。

spawn:只是簡單的執行一個子進程命令。不能設置超時時間。

fork:執行一個文件,不能設置超時和回調。

node進程間通信,指父進程和子進程之間的通信,子進程之間是不可以通信的,有點想react的組件。通過send和message事件進行通信。

//parent.js

let cp = require('child_process');

let n = cp.fork('./p_sub.js');

let time = new Date();

console.log('current time:'+ time);

n.on('message',function(msg){

console.log(`time have passd ${new Date() - time}`);

console.log('parent get message:' + msg.foo);

})

n.send({hello:'world'});

console.log('send ok');

while((new Date()) - time < 20){

// do nothing...

}

//sbu.js

let time = new Date();

console.log('current time:'+ time);

process.on('message',function(m){

console.log('massage from parent:' + m.hello);

process.send({foo:'bar'});

})

父子進程間通信如此簡單。接下來就要談論關鍵的東西了,node的多進程服務器。在這之前,我們還需要了解的一個東西叫做句柄,句柄可以理解問表示資源的引用,總感覺像是指針這樣的東西,可以理解為js對象名和對象之間的關系,不過這是系統對資源的引用,句柄可以是一個socket對象,套接字,管道等。父進程和子進程之間可以傳遞句柄。這就是弄的多進程服務器的關鍵,主進程接受80端口(當然也可以其他端口)請求,然后將句柄 傳遞個子進程,由子進程處理,然后將結果發送給主進程。豈不是很好。異步I/O單線程,又充分利用cpu資源。如果這樣理解那你就錯了。其實node發送的句柄,并不是真正的對象,而是這個對象的引用,這是一個搶占是服務相當于多個進程同時監聽了同一個端口。

//process.js

let sub_process = require('child_process');

let child1 = sub_process.fork('./p_children.js');

let child2 = sub_process.fork('./p_children.js');

let child3 = sub_process.fork('./p_children.js');

let server = require('net').createServer();

server.listen(1337,function(){

child1.send('server',server);

child2.send('server',server);

child3.send('server',server);

server.close();

})

//p_children.js

let http = require('http');

let server = http.createServer(function(req,res){

res.writeHead(200,{'Conten-Type':'text-plain'});

res.end('handle by child,pis is ' + process.pid);

});

process.on('message',(m,tcp)=>{

if(m==='server'){

tcp.on('connection',function(socket){

server.emit('connection',socket);

})

}

})

這只是萬里長征的第一步,單線程總歸是不穩定的,例如檢測到子進程推出后重啟另一個進程,并且限制子進程數量,子進程之間要做負載均衡,又突然感覺一臉蒙蔽,為應對這些node引入了cluster模塊,解決多cpu利用率問題,上面提到的這些問題用cluster模塊輕松搞定。

var cluster = require('cluster');

cluster.setupMaster({

exec:'p_children.js'

})

let cpus = require('os').cpus();

for(let i=0;i

cluster.fork();

}

這樣以來就感覺爽歪歪了,不過淡定,現在用pm2直接配置就可以做這個事情,所以上面你看的沒用,直接用pm2就對了。所以上面說的基本是扯淡。

總結

以上是生活随笔為你收集整理的node 多进程 vs java_node多进程服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。