**jsGen**大量使用了内存缓存,开启Cluster多进程后,各进程进程之间是独立的,这个进程更新了数据缓存,那个进程却没有更新。有什么办法让各个进程共享内存缓存?
6 回复
仅提供一个思路:在master进程初始化jsGen,worker进程通过message事件向master进程申请jsGen的api访问。写了个简单的例子,实际操作起来还要适当封装api,序列化参数等等
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
var info={counter:1}
for (var i = 0; i < numCPUs; i++) {
var worker=cluster.fork();
worker.on('message',function(msg){
info.counter++;
this.send(info);
}.bind(worker));
}
} else {
http.createServer(function(req, res) {
process.send('getInfo');
process.once('message',function(info){
res.writeHead(200);
res.end(info.counter+":hello world\n");
});
}).listen(8080);
}
个人是倾向于不用cluster的,非cpu密集运算的应用,多进程对nodejs性能提升甚微;退一步讲,就算要执行cpu密集运算,也可以通过child_process手工fork一个进程来单独执行。