使用适用于Node.js的Webworker-Threads并行运行多个线程

时间:2014-03-18 12:33:10

标签: javascript multithreading node.js

我非常擅长将Node.js和WebWorker-Threads用于Node.js(https://github.com/audreyt/node-webworker-threads)。 WebWorker-Threads模块基于Thread-A-Gogo(https://github.com/xk/node-threads-a-gogo)。

以下是我的问题摘要:

  • 我有一个名为" readFile.js"的文件,其中包含读取csv的代码 传入的文件,并将csv数据转换为2D数组。

  • 我想要的功能"" exports.parseCSV"在" readFile.js"成为 每个线程在多个工作线程中加载和执行 并行运行。

  • 我有一个文件" test1.js",它试图通过使用 线程池:

var Threads = require('webworker-threads');
var parser = require('./readFile.js');

var numThreads = 3;
var threadPool = Threads.createPool(numThreads);
threadPool.all.eval(parser.parseCSV);

for (var i = 1; i <=3; i++) {
    (function(i) {
        threadPool.any.eval(parser.parseCSV("csvFile.csv"), function (err, val) {
            if (i == 3) {
                console.log("bye!");
                threadPool.destroy();
            }
        });
    })(i);
}
  • 我有另一个文件&#34; test2.js&#34;,它试图通过执行第2点 手动创建线程:

function cb (err, result) {
    if (err) { 
        console.log("\n" + " ERROR! ERROR! ERROR!");
        throw err;
    }
    console.log(" NO ERROR!");
    thread.destroy();
}

var Threads = require('webworker-threads');
var parser = require('./readFile.js');
var thread = Threads.create();

thread.eval(parser.parseCSV);
thread.eval(parser.parseCSV("csvFile.csv"), cb); 
thread.eval(parser.parseCSV);
thread.eval(parser.parseCSV("csvFile.csv"), cb);
thread.eval(parser.parseCSV);
thread.eval(parser.parseCSV("csvFile.csv"), cb); 
  • 当我运行&#34;测试[x] .js&#34;在命令提示符中使用命令node test[x].js的文件,线程似乎正在工作,但它看起来好像是按顺序执行,而不是并行执行。我根据每个线程开始的时间输出来说这个,我打印到命令提示符窗口。

如何在后台执行多个并行运行的Webworker-Threads?我希望线程同时启动并以相同的方式结束(如果可能的话)。我查看了WebWorker-Threads的API,但我还没有能够解决这个问题。一旦这个工作,我想使用相同的方法不仅读取csv文件,而且还将其内容存储到数据库中。

任何帮助将不胜感激!非常感谢你:))

0 个答案:

没有答案