1

我实现了 3 种排序算法,我想并行运行它们并在console.log完成后立即打印它们。我尝试使用parallel异步库(https://github.com/caolan/async)使用该函数,但它的行为似乎不像我期望的那样。我看到了一些关于生成子进程的主题,但它似乎总是等待一种完成,然后再执行下一个;它总是按执行的顺序打印。我认为无论执行顺序如何,我的较快排序都会在较慢的排序之前打印。是否可以使用 node.js 实现这种类型的行为?如果是这样,怎么做?如果不是,为什么不呢?

4

2 回答 2

0

排序是一种同步操作。

因为Node.js是单线程的,所以没有办法在不产生多个子进程的情况下并行运行多种排序。单个Node.js进程无法并行运行同步代码。

您可以做的最好的事情是将每个排序算法包装到一个元函数中,该函数将产生一个子进程,然后将实际排序分派给它。

如果您想在生产中实现并行性,那么最好使用集群之类的东西来保留一组工作人员,而不是为每个任务生成一个新工作人员。

有一些具有类似功能的现成库。我刚刚使用谷歌找到了一个:node-compute-cluster康纳·布莱克在回答中提到了另一个。

于 2013-10-18T12:30:39.257 回答
0

我真的很喜欢这个库:http ://adambom.github.io/parallel.js/

您可以像这样使用它(来自文档):

var slowSquare = function (n) { 
    var i = 0; 
    while (++i < n * n) {}
    return i; 
};

// Create a job
var p = new Parallel(100000);

// Spawn our slow function
p.spawn(slowSquare).then(yourCallback);
于 2013-10-17T19:51:33.870 回答