var Worker = require('webworker-threads').Worker;
require('http').createServer(function (req,res) {
  var fibo = new Worker(function() {
    function fibo (n) {
      return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
    }

    // which onmessage does this this refer to?
    onmessage = function (event) {  //reference 1
      postMessage(fibo(event.data));
    }
  });
  fibo.onmessage = function (event) { //reference 2
    res.end('fib(40) = ' + event.data);
  };
  fibo.postMessage(40);
}).listen(port);

这是作为 webworker 类示例的代码。

我正在查看 API,但似乎不明白上面代码中的引用 1 指的是什么。为什么 postMessage(40) 命中内部 onmessage 函数而不是 fibo.onmessage 函数?

最佳答案

这里要注意的要点是 onmessage() 和 postmessage() 用作主线程和工作线程之间的消息承载。这最初可能会令人困惑。所以流程是这样的

  • 创建工作线程。
    var fibo= new Worker...

  • 这将在 Node 中生成另一个 JavaScript 线程。它可以在后台并行运行并使用所有可用的 CPU 内核。否则在 node 中由于其单线程模型,不可能利用多个 CPU 内核(因此工作线程是处理 node 中 CPU 绑定(bind)任务的好方法)
  • 在我们定义的工作线程中
    a) 如何处理它收到的请求/工作 - onmessage() 完成这项工作。它监听任何传入的工作请求并对其采取行动。
  • onmessage= function (event) { //reference 1 postMessage(fibo(event.data)); }
    b) 工作完成后如何与主线程通信-
    postMessage 完成这项工作。
    postMessage(fibo(event.data));
    
  • 在主线程中:-
    一种。调用工作线程并给它一个任务来执行 - 即。使用 postmessage(现在你已经跳舞了)
    fibo.postMessage(40);

  • 湾定义有关工作线程完成其工作并响应后要采取的操作的监听器。 IE。使用 onmessage。
    fibo.onmessage = function (event) { //reference 2
    res.end('fib(40) = ' + event.data);
    

    };

    关于node.js - 有人可以解释 webworker-thread 示例吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20913838/

    10-12 16:25