节点工作者线程无法加载外部模块?

时间:2014-05-12 21:40:54

标签: javascript node.js concurrency

我试图在我的服务器上多线程执行cpu密集型作业。我使用的是webworker-threads。

Server.js :(相关部分)

var Worker = require('webworker-threads').Worker;
function doWork(req, res)
{   
    console.log("connection received");
    var fibo = new Worker('plainworker.js');

    fibo.onmessage = function (event) {
        res.json('fib(10) = ' + event.data);
    };

    fibo.postMessage(10);
}

plainworker.js:

var _ = require('underscore'); ///////////// <---- PROBLEM LINE

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}

所以我注意到如果我在plainworker.js文件中加载了一个模块,那么它就会吓坏了并且停滞不前。如果我删除此行,那么一切正常。问题是,我想在我的工作人员中使用下划线...

有没有人有线程-a-gogo或webworker-threads的经验,可以告诉我他们是否已成功加载工作线程中的外部模块?

1 个答案:

答案 0 :(得分:4)

看起来我必须使用'importScripts(..)'函数(see here),因为要求似乎不在工作线程中工作。

plainworker.js:

importScripts('./node_modules/underscore/underscore.js');

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}