如何并行运行排序算法?

时间:2013-10-17 19:40:13

标签: node.js

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

排序是一种同步操作。

因为Node.js是单线程的,所以无法并行运行多种类型的几个child processes。单个Node.js进程无法并行运行同步代码。

你能做的最好的事情就是将每个排序算法包装成一个元函数,它将生成一个子进程,然后将实际的排序分配给它。

您希望在生产中实现并行性,然后最好使用cluster之类的东西来保留一组工作人员,而不是为每个任务生成一个新的工作人员。

有一些具有类似功能的现成库。我刚刚找到一个使用谷歌:node-compute-cluster Connor Black in his answer上提到了另一个。