1个线程与5个线程进行分布式系统通信?

时间:2018-09-07 15:15:25

标签: linux multithreading network-programming zeromq distributed-system

我正在研究一个小型网络系统原型,该原型在最低级别上具有一个软件“父”进程,该进程与5个软件“子”进程进行来回通信。

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

我的问题是多线程处理与单线程处理的问题。

在这种系统中,父级中用于处理与子级之间发送,接收和处理消息的单个线程是否比5个线程(每个进程1个线程)更有效?

对于单线程,我担心当父级处理一条消息时,这些消息将开始堆积。

对于多线程,如果扩展此系统体系结构,我担心上下文切换和性能下降。想想50个父母,每条5条线程,那么最少250条线程。

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

我使用Linux和C ++。

1 个答案:

答案 0 :(得分:1)

您可以在父级上运行消息队列,这也应使其在按事件到达顺序处理事件时不会被子级淹没。此外,您可以将其扩展为一个简单的发送确认模型,在该模型中,孩子将在发送更多消息之前等待消息被确认,因此您可以允许父级控制接收消息的速率。

关于要运行的线程数,我同意你的看法,因为随着父级程序规模的扩大,复杂性将会增加。

我认为,主要因素将是线程是否需要共享任何数据或彼此通信。如果不是这种情况,问题就会得到简化,因为您可以每1个或更多的孩子使用1个线程,并且仅从队列中获取消息。