我正在尝试创建一个递归函数,比如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);
});
你真的需要它吗?http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
做这件事需要开销。
这些子节点仍然是V8的全新实例。假设每个新节点的启动时间至少为30ms,内存至少为10mb。也就是说,你不可能创造出成千上万个。
我宁愿有一些消息队列,或者只是一个子进程池。因此,每次需要创建一个新进程时,只需将带有参数的消息推送到其中一个池实例或队列中。
如果你的Merge函数足够快,就没有理由拥有所有这些东西,那么直接计算就可以了