有人可以解释webworker线程的例子吗?

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()被用作主线程和工作线程之间的消息承载。 这最初可能会让人困惑。 所以stream量是这样的

  1. 创build一个工作线程。

    var fibo= new Worker...

这将在节点中产生另一个JavaScript线程。 它可以在后台并行运行并使用所有可用的CPU核心。 否则,由于其单线程模型,在节点中,利用多个CPU核心是不可能的(因此,工作线程是处理节点中CPU限制任务的好方法)

  1. 在工作者线程中,我们定义a)如何处理接收到的请求/工作 – onmessage()完成这项工作。 它会监听任何传入的工作请求并采取行动。

onmessage= function (event) { //reference 1 postMessage(fibo(event.data)); }

b)一旦完成工作,如何与主线程通信 – postMessage完成这项工作。

 postMessage(fibo(event.data)); 
  1. 在主线程中: – a。 调用工作线程并给它一个执行-ie的任务。 使用postmessage(现在你得到了舞蹈)

    fibo.postMessage(40);

湾 定义监听者关于一旦工作线程完成工作并采取响应的动作。 即。 使用onmessage。

 fibo.onmessage = function (event) { //reference 2 res.end('fib(40) = ' + event.data); 

};

试试这个代码:

 var port=8080; var Worker = require('webworker-threads').Worker; 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 console.log("fibo.onmessage inside"); postMessage(fibo(event.data)); } }); fibo.onmessage = function (event) { //reference 2 console.log("fibo.onmessage outside") console.log('fib(40) = ' + event.data); }; fibo.postMessage(40); 

它给

 fibo.onmessage inside fibo.onmessage outside fib(40) = 165580141 

关键的是,它必须在另一个节点上运行,所以这意味着在某个时刻它的行为(甚至没有closures,但仍然适用)


    上class族{
        构造(fnToRun){
             child_process.spawn('thread-creator-process',[
                 '-fn',转义(fnToRun.toString())
             ]);
         }
     }

所以现在另一个哥们可以做一些类似的事情


     var result = new Function('context', 
     '与(上下文){' +
     ''+ fnAsString + 
     '}'

结果(thisThreadContext);

现在上下文有onmessage引用它将被创build,它可以已经有一个引用postMessage和这些东西,一点点parsing你有一个新的线程来处理

至less我认为这样