我试图在我的服务器上多线程执行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的经验,可以告诉我他们是否已成功加载工作线程中的外部模块?
答案 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));
}