1 个线程与 5 个线程用于分布式系统通信?

1 thread vs 5 threads for distributed system communications?

我正在研究一个小型网络系统原型,在它的最低级别,有一个软件 "parent" 进程与 5 个软件 "children" 进程来回通信。

我正在使用 ZeroMQ 在进程之间进行通信。

我的问题是 multi-threaded 处理与 singled-threaded 处理的问题。

在这种系统中,parent 中处理发送、接收和处理消息到 children 的单个线程比 5 个线程(每个进程 1 个线程)效率更高)?

对于 singled-threaded,我担心当 parent 处理一条消息时,消息会开始堆积。

对于 multi-threaded,如果扩展此系统架构,我担心上下文切换和性能下降。考虑 50 parents 在 5 个线程,所以最少 250 个线程。

线程被写入ZeroMQ standards,没有锁、关键部分、共享内存等

我使用 Linux 和 C++。

您可以 运行 parent 上的消息队列,这也应该允许它在按事件到达的顺序处理事件时不会被 children 淹没。此外,您可以将其扩展为一个简单的 send-acknowledge 模型,其中 children 将等待他们的消息被确认,然后再发送更多消息,因此您可以允许 parent 控制速率它接收消息的位置。

关于 运行 的线程数,我同意你的看法,随着你扩展 parent 程序的复杂性会增加。

我认为,主要因素是线程之间是否需要共享任何数据或进行通信。如果不是这种情况,则问题会得到简化,因为您可以每 1 个或多个线程使用 1 个线程 children 并只从队列中获取消息。