child_process真的能提升性能吗?
发布于 10 年前 作者 mBigFlower 3982 次浏览 最后一次编辑是 8 年前 来自 问答

代码如下:

var cp = require('child_process');
for(var cpIndex =0;cpIndex < 5;cpIndex++){//生成一个进程池
	var addUserCp = cp.fork(__dirname + '/addUser.js');
	addUserCp.on("message",function(m){//子进程执行完了之后,通过message事件来接受子进程发过来的数据
		var err = m.err;
		var result = m.result;
		var id = m.id;
		var totalProcess = processNum[id].totalProcess;
		if(++processNum[id].num === totalProcess){
			var callback = callbackJson[id];
			if(callback)callback(err,result);
			delete callbackJson[id];
			delete processNum[id];
		}
	})
	addUserCpList.push(addUserCp);
}

问题:

为了批量导入用户,并用bcrypt来做hash生成用户密码,其速度如npm显示的: 屏幕快照 2015-05-22 下午3.26.09.png 我rounds取的8,大概每秒能做40个hash运算,速度还是很慢,于是就想到在主进程里用child_process开启多进程来同时计算,但是发现,多进程和我直接用eventproxy耗费的时间没什么变化。 想问问,child_process正确的方法该怎么用,才能真的提升nodejs的性能。

4 回复

你是不是只有一个核?

@kyriosli 屏幕快照 2015-05-22 下午3.48.41.png 应该是两核的

child_process 的正确用法是 相当于你花钱雇佣一个专业的杀手 去干掉你杀不了的人

@dayuoba 放到一个8核的服务器上试了一下,做500个hash,大概要2180ms,平均4ms左右一个,与单核平均25ms一个,确实提升了。

回到顶部