进程间通信

// 同一进程中的线程因属同一地址空间,可直接通信

IPC (Inter-process communication) 进程间通信技术. 常见的进程间通信技术列表如下:
类型
无连接
可靠
流控制
优先级
普通 PIPE
N
Y
Y
N
命名 PIPE
N
Y
Y
N
消息队列
N
Y
Y
N
信号量
N
Y
Y
Y
共享存储(内存)
N
Y
Y
Y
UNIX 流 SOCKET
N
Y
Y
N
UNIX 数据包SOCKET
Y
Y
N
N
Node.js 中的 IPC 通信在 windows 下由命名管道(named pipe)实现,*nix 系统(下)则采用 UDS (Unix Domain Socket) 实现.

普通的 socket 是为网络通讯设计的, 而网络本身是不可靠的, 而为 IPC 设计的 socket 则不然, 因为默认本地的网络环境是可靠的, 所以可以简化大量不必要的 encode/decode 以及计算校验等, 得到效率更高的 UDS 通信.
在 IPC 通道建立之前, 父进程与子进程是怎么通信的? 如果没有通信, 那 IPC 是怎么建立的? 这个问题也挺简单, 只是个思路的问题. 在通过 child_process 建立子进程的时候, 是可以指定子进程的 env (环境变量) 的. 所以 Node.js 在启动子进程的时候, 主进程先建立 IPC 频道, 然后将 IPC 频道的 fd (文件描述符) 通过环境变量 (NODE_CHANNEL_FD) 的方式传递给子进程, 然后子进程通过 fd 连上 IPC 与父进程建立连接.