nodejs 多线程通信 线程计算测试

###main.js

let child = require('child_process');
let os = require('os');

let time = 1;

createChild();
function createChild() {
let start = new Date().getTime();
let cpus = os.cpus();
for(let i=0;i<cpus.length;i++){
let child_process = child.fork('./zhishu.js');
child_process.on('message',function (m) {//当子线程send的时候触发此方法
console.log(child_process.pid+'的时间:'+m.time+',质数个数为:'+m.total);
});
child_process.send({time:i});//给子线程传递参数
}
let end = new Date().getTime();
console.log('start server ...'+(end-start));
}



##child.js

//判断一个数是不是质数
function zhishu_js(num) {
if (num == 1) {
return false;
}
if (num == 2) {
return true;
}
for (var i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
let time = 1;

//测试一共需要多长时间
//test();
function test() {
let total = 0;
let start = new Date().getTime();
for(let i = 1;i<400000;i++){
if(zhishu_js(i)){
total+=1;
}
}
let end = new Date().getTime();
console.log('total time ='+(end - start)+'total = '+total);
}

//接受主线程中线程传递进来的参数
process.on('message',function (message) {
let total = 0;
time = message.time*100000;
console.log('message:'+time);
let start = new Date().getTime();
let i = time+100000;
for(time;time<i;time++){
if(zhishu_js(time)){
total++;
}
}
let end = new Date().getTime();
process.send({time:(end-start),total:total});
});
posted @ 2017-05-15 16:07  _风的线条  阅读(1227)  评论(0)    收藏  举报