process.send 是 *nix/Windows 上的 sync/async?

process.send is sync/async on *nix/Windows?

我有一个 Node.js 进程(不是服务器)派生出 N 个子进程。 在某些时候可能会有超过 50 个 CP。所以我开始想,如果 process.send (IPC) 真的阻塞了,那么这可能是每个 CP 都会经历的一个很大的惩罚。因为在我的程序中发生的情况是每个CP使用process.send向单父进程发送消息,让父进程进行日志记录,这样日志记录就会同步。但是,如果 process.send 阻塞,那么在某些时候父进程可能会成为瓶颈。

所以问题是 - Node.js *nix 和 Windows 上的 IPC 是阻塞还是非阻塞?如果它是阻塞的,如果我或其他人真的想要 异步 IPC,我应该使用消息队列还是 ZeroMQ 或其他东西?

进程发送已设置为异步,参见https://github.com/nodejs/node/commit/56d9584a0ead78874ca9d4de2e55b41c4056e502

"`ChildProcess.prototype.send()` and `process.send()` used to operate
synchronously but became asynchronous in commit libuv/libuv@393c1c5"

这是由于 libuv 代码的更改;它有一些缺点,但如果您担心父进程成为瓶颈,您可以改为使用管道进行通信。

50 个 CP 不会有问题,但 500 个可能有问题,具体取决于您的架构和消息的大小。那时我会推荐一个更花哨的消息队列。 ZeroMQ 或普通的 redis 应该可以工作。