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

我有一个Node.js进程(而不是服务器),分叉N个subprocess。 有些时候可能会有超过50个CP。 所以我开始考虑如果process.send(IPC)真的被封锁,那么这可能是每个CP所经历的一个很大的惩罚。 因为在我的程序中发生的事情是,每个CP使用process.send向单个父进程发送消息,以便父​​进程执行日志logging,以便日志同步。 但是,如果process.send阻塞,那么父进程可能会成为瓶颈。

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

进程发送已被设置为asynchronous,请参阅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代码的变化造成的; 它有一些缺点,但是如果你担心父进程成为瓶颈,你可以使用pipe道进行通信。

50 CP不会成为一个问题,但500可能,这取决于你的架构和消息的大小。 那时候我会推荐一个比较花哨的消息队列。 ZeroMQ或简单的redis应该工作。