官方文档:https://nodejs.org/api/child_...

关于进程

我们知道,nodejs是在V8 引擎上构建的,所以它也是运行在一个单进程的单线程上。

这样程序是单一的,没有多线程,没有锁,没有线程同步这样那样的问题。操作系统在调度时候也少了上下文切换。

node中一个进程对应一个核

但是现在的CPU都是多核的,真正的服务器(非VPS)还是多CPU的

那我们该如何利用多核CPU服务器?

单线程执行的node,在线程抛出异常没有被捕获时候,会引起整个系统的崩溃

如何保证进程的健壮性和稳定性?

child_process

nodejs是一种单线程模型,我们的javascript程序会运行在单个进程的单个进程上,但是,使用nodejs的child_process模块可以实现多进程任务。利用child_process可以创建子进程,实现子进程和主进程之间的通信。

The child_process module provides the ability to spawn child processes in a manner that is similar, but not identical, to popen(3). This capability is primarily provided by the child_process.spawn() function:
const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

child_process提供以下同步和异步的方式创建进程

图片描述

其中 child_process.fork() 函数让我们实现进程的复制

其他常见API解释建议看文档 或者 这篇文章Nodejs进阶:如何玩转子进程(child_process)

execSync

clipboard.png

参考

exec 和 spawn 的区别
Node.js中spawn与exec的异同比较


白鲸鱼
1k 声望110 粉丝

方寸湛蓝