Javascript 比较Node.js中exec()和setTimeout的执行模型
我只是想了解node.js的内部结构。我们需要执行shell脚本并将输出捕获到变量。我们找到了以下解决方案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
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中执行命令,”生成不是创建进程?只是古玩