API
进程
child_process
子进程调用和通信
exec:shell方式调用子进程,输出值默认有maxBuffer限制,一般用于获取执行结果而非大量数据。
spawn:原理类似exec,监听stdout输出流来获取数据,可用于产生大量数据的进程。
fork:针对node子进程的特殊spawn,以较高效率的IPC管道通信,可用process.send(data)和process.on('message', callback)通信。
cluster
node的集群管理模块。
一般以cpu核数来执行cluster.fork,来生成对应数量的worker进程。通过cluster.isMaster来区分master进程和worker进程
cluster.fork基于child_process.fork实现。所以master和worker间也是以IPC通信。与child_process.fork不同,cluster.fork生成的多个worker可以监听同一端口。
fs模块
日志
日志一般以文件形式存储在磁盘。如果每次日志变更都去读写,可能会造成频繁的磁盘IO,可以先把日志存在内存,再定时写入磁盘。
相关API:
// 创建stream,以追加模式写入文件
const stream = fs.createWriteStream('./access.log', { flags: 'a' });
let logCache = '';
setInterval(() => {
// 往stream里定时写入缓存的日志
stream.write(logCache);
logCache = '';
}, 1000);
// 业务代码中,记录日志到缓存
onAccess((data) => {
logCache += data + '\n';
});