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

时间:2015-11-11 15:00:10

标签: c++ linux multithreading ipc interprocess

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

一些想法:

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

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

有几种方法可以实现这样的分类帐,一个例子是Chronicle-Queue(对于v3有一些C ++实现 - cornelich)。