MST

星途 面试题库

面试题:Node.js多进程中如何实现进程间通信

在Node.js多进程编程场景下,描述一下常用的进程间通信方式,并举例说明如何使用其中一种方式来传递简单的数据。
13.9万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

常用的进程间通信方式

  1. IPC(Inter - Process Communication)通道:Node.js 基于 IPC 实现了进程间通信,主进程和子进程之间通过一个IPC通道来交换信息,它采用了管道(pipe)的方式,在Windows下基于命名管道实现,在*nix系统下基于Unix域套接字实现。这是Node.js多进程通信的基础方式,子进程可以通过process.send()向父进程发送消息,父进程通过childProcess.on('message', callback)监听子进程发来的消息。
  2. 共享内存:虽然Node.js没有直接提供共享内存的机制,但可以借助一些第三方库(如shm - node)来实现。共享内存允许不同进程访问同一块内存区域,以此来交换数据,适合大数据量的共享场景,但需要注意同步问题以避免数据竞争。
  3. 消息队列:可以使用如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')监听接收子进程的回复。