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解决办法