这个问题是关于 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/

10-10 00:52