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});
});
浙公网安备 33010602011771号