比较Node.js中exec()与setTimeout的执行模型

时间:2018-09-05 08:23:21

标签: javascript node.js multithreading shell

我只是好奇地了解node.js内部。我们需要执行shell脚本并将输出捕获到变量中。我们找到了以下解决方案

const exec = require('child_process').exec;
exec('pwd', (err, stdo, stde) => {
      if (err) return;
      // capture output .. it can grow later
      out = stdo;
});


setTimeout(() => console.log('test'), 3000);

.execsetTimeout异步运行。但是, setTimeout 不会创建单独的进程或线程(它使用libuv或V8异步API),这些异步调用由系统池处理(因为它不会为每个setTimeout创建进程或线程)速度更快,内存更少)

现在,当我运行 .exec 时,我们正在使用child_process(这可能会生成单独的进程),我们假设它将在node.js上创建一个thread or process级别(例如我们如何在 Java和C#中创建线程)。派生一个进程或线程会花费一些时间,并且还会消耗进程内存大小。

.exec的工作原理类似于Java和C#线程吗?还是运行类似于使用V8异步API或libuv的setTimeout?

简而言之,如果我运行一百万个setTimeouts,则该过程将不会挂起(demo shown by Ryan Dahl)。如果我创建了100万个.exec(),其行为是否类似于setTimeouts或它是否因生成的进程而过分夸大并炸毁了服务器? (一旦获得访问权限,我会尝试,但我真的很想知道内部行为,而不是隐约地说它消失了)。 任何帮助将不胜感激。

最后,如果仅执行shell脚本,Node.js是用于处理并发连接的语言的很好选择吗?

参考:

https://zaiste.net/nodejs-child-process-spawn-exec-fork-async-await/

  

提及child_process模块​​允许在以下位置创建子进程   Node.js。

https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

  

生成一个shell,然后在该shell中执行命令。

0 个答案:

没有答案