面试题答案
一键面试常用的进程间通信方式
- IPC(Inter - Process Communication)通道:Node.js 基于 IPC 实现了进程间通信,主进程和子进程之间通过一个IPC通道来交换信息,它采用了管道(pipe)的方式,在Windows下基于命名管道实现,在*nix系统下基于Unix域套接字实现。这是Node.js多进程通信的基础方式,子进程可以通过
process.send()
向父进程发送消息,父进程通过childProcess.on('message', callback)
监听子进程发来的消息。 - 共享内存:虽然Node.js没有直接提供共享内存的机制,但可以借助一些第三方库(如
shm - node
)来实现。共享内存允许不同进程访问同一块内存区域,以此来交换数据,适合大数据量的共享场景,但需要注意同步问题以避免数据竞争。 - 消息队列:可以使用如
bull
这样的消息队列库。不同进程将消息发送到消息队列,其他进程从队列中读取消息,实现异步的进程间通信,常用于解耦任务、实现可靠的消息传递等场景。
使用 IPC 通道传递简单数据示例
// 主进程代码(parent.js)
const { fork } = require('child_process');
const child = fork('child.js');
child.on('message', (msg) => {
console.log('父进程接收到子进程消息:', msg);
});
child.send('这是来自父进程的消息');
// 子进程代码(child.js)
process.on('message', (msg) => {
console.log('子进程接收到父进程消息:', msg);
process.send('这是来自子进程的回复');
});
在上述示例中,主进程通过fork
创建一个子进程,然后主进程使用child.send
向子进程发送消息,子进程通过process.on('message')
监听并接收消息,接着子进程使用process.send
向主进程回复消息,主进程再通过child.on('message')
监听接收子进程的回复。