这个问题与webworker-threads
node.js module有关。
webworker-threads
模块的文档非常有限,我找不到任何有关如何实现目标的新的友好示例。
简单地说,我有两个CPU密集型功能需要同时运行,必须返回结果并在完成后立即打印。因为这些同步方法是阻塞的,我现在的模型是这样的:
我想要实现的目标是:
但是我不是专家,我无法理解将webmeer-threads模块的Readme.md中提供的信息转换成我自己的情况。
我目前的黑客工作代码是这样的:
var Worker = require('webworker-threads').Worker;
//console.time("worker1");
var worker = new Worker(function(){
onmessage = function(event) {
postMessage(event.data);
self.close();
};
});
worker.onmessage = function(event) {
console.log("Worker1 said : " + event.data);
};
worker.postMessage(work());
//console.timeEnd("worker1")
//console.time("worker2");
var worker2 = new Worker(function(){
onmessage = function(event) {
postMessage(event.data);
self.close();
};
});
worker2.onmessage = function(event) {
console.log("Worker2 said : " + event.data);
};
worker2.postMessage(work2());
//console.timeEnd("worker2")
function work(){
var total = 0;
for (var i=0; i<430046534; i++){
total += (i*i*i);
}
return total;
}
function work2(){
var total = 0;
for (var i=0; i<630746533; i++){
total += (i*i*i);
}
return total;
}
但是,结果只会在第二个工作人员完成时打印到控制台,我甚至不确定我是否正确使用这个模块。
答案 0 :(得分:2)
您将工作职能的结果发布给工作人员。将该函数放入Web worker中,然后在onmessage期间调用它。
var worker = new Worker(function(){
function work(n){
var res;
for (var i = 0; i < n; i++){
res += i * i * i;
}
return res;
}
onmessage = function(event) {
var result = work(event.data)
postMessage(result);
self.close();
};
});
&#13;
你正在服务器端做所有繁重的工作,你想把工作放在工人身上。您通过在主线程上工作来阻止整个服务器线程。