我正在尝试创建一个递归函数,比如Merge Sort。我想在每次调用函数时创建一个新进程。
基本上我想在每次调用函数时将任务分成两部分,并将每个部分传递给一个新进程。
这是我的代码:
merge.js
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (chunk) {
var arr = chunk.trim().split(' ');
mergeSort(arr,0,arr.length - 1);
// I want to create new threads like this
// CreateNewLeftThread
// CreateNewRightThread
// Join(lefThread.rightThread)
function mergeSort(arr,left,right) {
if (left < right) {
var mid = Math.floor(left + (right - left)/2);
mergeSort(arr,left,mid);
mergeSort(arr,mid+1,right);
merge(arr,left,right,mid);
}
}
function Merge(Parameters) {
/*Code Here*/
}
process.exit(0);
});
答案 0 :(得分:1)
这样做会产生开销。
这些子节点仍然是V8的全新实例。假设每个新节点至少启动30ms,内存为10mb。也就是说,你无法创建数千个。
我宁愿拥有一些消息队列或只是一个子进程池。 因此,每次需要创建新进程时,只需将带有参数的消息推送到其中一个池实例或队列中。
如果您的合并功能足够快,没有理由拥有所有这些东西,那么直接计算就可以了。