node.js - 每次我在 Node.js 中调用递归函数时如何生成新进程

标签 node.js mergesort spawn

我正在尝试创建一个递归函数,比如合并排序。我想在每次调用该函数时都创建一个新进程。

基本上我想在每次调用函数时将任务分成两部分并将每个部分传递给新进程。

这是我的代码:

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

这样做会产生开销。

These child Nodes are still whole new instances of V8. Assume at least 30ms startup and 10mb memory for each new Node. That is, you cannot create many thousands of them.

我宁愿有一些消息队列或只是一个子进程池。 因此,每次您需要创建一个新进程时,您只需将带有参数的消息推送到池实例之一或队列中。

如果您的 Merge 函数足够快,就没有理由拥有所有这些东西,直接计算就可以了。

关于node.js - 每次我在 Node.js 中调用递归函数时如何生成新进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785711/

相关文章:

css - 使用 Live Sass 编译器(VS Code 扩展)还是通过 npm 安装和运行 Sass 更好? (+ 提示如何从 node-sass 更改为 dart-sass)

javascript - 传递给用户模型时表示 req.body 未定义

node.js - 每个用户的nodejs动态连接

c++ - 处理迭代器时由信号 SIGSEGV(地址边界错误)终止

c++ - 实现归并排序 C++

c++ - 首选哪种Merge排序实现...为什么?

javascript - 有什么方法可以确定 Nodejs 子进程是否需要输入或只是发送反馈?

javascript - Electron 需要模块 : due to diffrent working directory while runtime intellisense is not working

python - 如何在 Python 中生成一个新的独立进程

Java ProcessBuilder().start() 与 NodeJS require ('child_process' ).spawn()