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/