Node复习文档二
Node
Child process 子进程
创建子进程的4种方式。
spawn() - 最通用的方式
exec() - 执行命令并获取输出
execFile() - 执行可执行文件
fork() - 专用的 Node.js 进程
实际应用场景
场景1:CPU密集型任务分流
场景2:实时日志处理。
场景3:视频转码服务
性能优化技巧
调试和监控
集成任务队列系统
子进程是 Node.js 中处理 CPU 密集型任务、系统命令执行和并行处理的强大工具。正确使用可以显著提升应用性能和可靠性。
Cluster 集群
解决了Node.js 单线程的瓶颈,
+-------------------+
| Master进程 |
| (PID: 1000) |
| |
| • 创建worker |
| • 管理worker状态 |
| • 负载均衡 |
+---------+---------+
|
+----------------+-----------------+
| | |
+---------v------+ +-------v-------+ +------v--------+
| Worker 1 | | Worker 2 | | Worker 3 |
| (PID: 1001) | | (PID: 1002) | | (PID: 1003) |
| | | | | |
| • 处理请求 | | • 处理请求 | | • 处理请求 |
| • 独立内存 | | • 独立内存 | | • 独立内存 |
| • 独立事件循环 | | • 独立事件循环 | | • 独立事件循环 |
+----------------+ +---------------+ +---------------+
所有worker共享同一个端口(3000)
操作系统进行负载均衡
特性 Cluster Child Process Worker Threads
进程/线程 多进程 多进程 多线程
内存隔离 ✅ 完全隔离 ✅ 完全隔离 ❌ 共享内存
启动开销 高 高 低
通信成本 IPC(慢) IPC(慢) 共享内存(快)
稳定性 一个崩溃不影响其他 一个崩溃不影响其他 一个崩溃可能影响全部
适用场景 HTTP服务器、多核利用 执行命令、运行脚本 CPU密集型计算
实际应用场景
高性能Web服务器
Socket.IO 集群.
任务处理集群.
高级特性(共享端口原理).
自定义负载均衡.
生产环境最佳实践
完整的生产配置
使用 commander.js(最流行的CLI框架)
交互式命令行工具 使用 inquirer.js
终端美化 使用 chalk 和 ora
实际场景:两者配合使用
场景:项目脚手架工具.
另一个场景:配置管理工具
方面 commander.js inquirer.js
主要用途 命令行参数解析和命令定义 交互式用户界面
使用场景 工具被其他脚本调用时 工具被人类用户直接使用时
输入方式 命令行一次性输入 交互式逐步输入
适合场景 CI/CD、自动化脚本、批处理 配置向导、安装程序、问答式工具
输出方式 直接输出结果 根据用户输入动态响应
用户体验 快速、高效、适合自动化 友好、引导式、适合新手
复杂度 适合复杂命令结构 适合复杂输入逻辑
什么时候用 commander.js?
// ✅ 适合:脚本调用、自动化、已有明确参数.
// 例如:构建工具、部署脚本、代码生成器.
什么时候用 inquirer.js?
// ✅ 适合:用户交互、配置向导、安装程序.
// 例如:项目初始化、配置设置、问卷调查.
什么时候两者都用?
// ✅ 适合:既有命令行参数支持,又有交互模式.
// 例如:现代CLI工具(create-react-app、vue-cli等).
两者结合可以创建既适合自动化又适合交互的现代CLI工具