当前位置:  开发笔记 > 编程语言 > 正文

process.send是*nix/Windows上的同步/异步?

如何解决《process.send是*nix/Windows上的同步/异步?》经验,为你挑选了1个好方法。

我有一个分配N个子进程的Node.js进程(不是服务器).在某些时候,可能会有超过50个CP.所以我开始认为如果process.send(IPC)真正阻塞,那么这可能是每个CP经历的重大惩罚.因为我的程序中发生的事情是每个CP使用process.send将消息发送到单个父进程,以便父进程进行日志记录,以便同步日志记录.但是如果process.send阻塞,那么父进程可能会成为瓶颈.

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



1> 小智..:

进程发送已设置为异步,请参阅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应该可以工作.


"`ChildProcess.prototype.send()`和`process.send()`用于同步操作但在commit libuv/libuv @ 393c1c5中变为异步"
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有