child_process真的能提升性能吗?
发布于 1个月前 作者 mBigFlower 224 次浏览 来自 问答

代码如下:

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 回复

你是不是只有一个核?

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

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

回到顶部