这个问题是关于 webworker-threads
node.js module 的。webworker-threads
模块的文档非常有限,我找不到任何关于如何实现我的目标的新手友好示例。
简而言之,我有两个 CPU 密集型函数需要同时运行,并且必须返回结果并在完成后立即打印。因为这些同步方法是阻塞的,所以我目前的模型是这样的:
我想要实现的是:
但是,我不是专家,我无法将 Readme.md 中为 webworker-threads 模块提供的信息翻译成我自己的情况。
我目前的黑客工作代码是这样的:
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;
}
但遗憾的是,结果仅在第二个工作人员完成后才会打印到控制台,我什至不确定我是否以正确的方式使用了这个模块。
最佳答案
您将工作职能的结果发布给工作人员。将该函数放在 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();
};
});
你在服务器端做所有繁重的工作,你想把工作交给 worker 。您通过在主线程上工作来阻塞整个服务器线程。
关于multithreading - 使用 webworker-threads 在 Node.js 中并发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22936092/