Q1:,与默认的进程间通信相比,使用ZeroMQ
向子进程发送消息的确切区别是什么--解释这里
Q2:对于子通信的直接进程,哪个更合适?(更快)
Q3:医生们说:Creates an IPC channel
,,它用的是什么样的IPC
?TCP
?插座?
发布于 2015-09-20 18:28:32
使用像ZeroMQ这样的消息队列可以使您扩展到多台机器,而子进程通信只能是本地的,只能扩展到该机器上的硬件。
由于消息代理依赖于TCP,因此消息代理的速度要慢一些,因为子进程通信使用管道或标准I/O,这更快,因为它避免了TCP和网络堆栈的开销。虽然我会说这里的速度优势是可以忽略不计的,特别是当你计划扩展到多台机器时。
值得注意的是,ZeroMQ可以使用unix_sockets,并提供与child_process
核心模块所提供的基本类似的其他形式的IPC。虽然它可能会更难使用。
也许,在需要跨多台计算机扩展之前,将ZeroMQ与unix_sockets或管道一起使用并不是个坏主意。
发布于 2021-07-15 09:35:22
在你所链接的案例中,我们讨论的是两个相互竞争的协议。一个是通用的(ZMQ),另一个是绑定到NodeJS的。引用关于IPC的文章中的话说,您链接到“以除process.send()以外的任何方式访问IPC通道fd,或使用IPC通道与非Node.js实例的子进程一起使用,都是不支持的。”
通常,IPC (进程间通信)可以引用许多不同的协议,包括ZMQ。ZMQ是一种IPC机制。还有其他较低级别的机制,如管道和UDP套接字。我使用了管道和UDP套接字,发现即使在简单的两方情况下,像ZMQ这样的更高级别的协议也几乎总是更好,因为管道和UDP有两个问题:
缓冲和分块。
缓冲:操作系统不断创建缓冲区来存储在进程之间发送的消息部分。这些缓冲区必须是刷新的。最后,您必须编写一堆很难正确处理的复杂代码,以同时刷新消息,并将消息读取并缝合在一起,部分发送消息。
分块:UDP的最大消息大小在500个到65000字节之间。当直接使用UDP时,您必须处理这些最大大小和消息块。ZMQ自动处理分块,您不需要对它进行修改。ZMQ中没有最大消息大小(在ZMQ的例子中,消息必须适合内存)。
https://stackoverflow.com/questions/32681838
复制相似问题