Linux多进程通信多生产者一消费者

Posted

技术标签:

【中文标题】Linux多进程通信多生产者一消费者【英文标题】:Linux multi process communication multiple producers one consumer 【发布时间】:2016-02-12 16:56:52 【问题描述】:

我需要在 C++ 上构建类似于客户端-服务器应用程序的东西。目标是使用多个线程跟踪多个进程(跟踪函数执行)并将这些数据收集到按线程 ID 划分的文件中。

现在我已经在 POSIX 消息队列上实现了这一点(服务器侦听队列并从生产者那里收集数据),但运行速度非常慢。关于在 Linux 平台(C++ 语言)上实现的任何其他想法。该任务的最佳沟通方式是什么?顺便说一句,一个线程范围内的数据顺序对我来说非常敏感。

【问题讨论】:

【参考方案1】:

几个想法:

1) 使用快速的发布-订阅系统。 Aeron 就是这种消息传递系统的一个例子。

2) 您可以让所有客户写入一个分类帐。然后添加一个读取器进程,轮询分类帐以获取新数据聚合/处理结果。

有几种方法可以实现这样的账本,一个例子是Chronicle-Queue(带有一些针对 v3 的 C++ 实现 - cornelich)。

【讨论】:

【参考方案2】:

Posix 消息队列是内核级别的东西,所以它们很慢。我建议您使用共享内存作为媒体来实现自己的队列 - 我认为,您有一个多进程(而不是多线程)应用程序。

【讨论】:

以上是关于Linux多进程通信多生产者一消费者的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题

并发无锁队列

JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法

day33多进程之进程间通信

python并发编程之多进程:互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5新特性解决办法-范例