Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较Node.js中exec()和setTimeout的执行模型_Javascript_Node.js_Multithreading_Shell - Fatal编程技术网

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

Javascript 比较Node.js中exec()和setTimeout的执行模型,javascript,node.js,multithreading,shell,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(() => co

我只是想了解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);
.exec
setTimeout
异步运行。但是,setTimeout不会创建单独的进程或线程(它使用libuv或V8 async API),这些异步调用由系统池处理(因为它不会为每个setTimeout创建进程或线程,这会使运行速度更快、内存更少)

现在,当我运行.exec时,我们正在使用
子进程
(这可能会产生单独的进程),我们假设它将在node.js级别创建一个
线程或进程
(就像我们在Java和C#中创建线程一样)。这需要花费一些时间来分叉进程或线程,并且还消耗了进程内存大小

那么
.exec
的工作原理是否与Java和C#线程类似?或者它的运行方式是否与利用V8异步API或libuv的setTimeout类似

简而言之,如果我运行100万次设置超时,进程将不会挂起()。如果我创建了一百万个
.exec()
,那么行为是否与设置超时类似,或者它是否会对生成的进程进行过度流量,从而导致服务器崩溃?(一旦我接触到,我会尝试,但我真的很想知道它的内在行为,而不是含糊其辞地说它爆炸了)。 非常感谢您的帮助

最后,如果我们只执行shell脚本,Node.js是否是处理并发连接的好语言选择

参考资料:

提到子进程模块允许在中创建子进程 Node.js

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


exec
确实在操作系统级别创建了一个新进程。它与node.js中的线程无关。@Bergi只是好奇,如果
exec
没有创建进程,它是否使用V8异步api,那么运行一百万个exec不会炸毁系统?同时运行一百万个进程会炸毁大多数操作系统。我说过“exec确实创建了一个新进程”@Bergi“生成一个shell,然后在该shell中执行命令,”生成不是创建进程?只是古玩