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