Ubuntu 上最有效的进程间通信

Posted

技术标签:

【中文标题】Ubuntu 上最有效的进程间通信【英文标题】:Most efficient inter-process communication on Ubuntu 【发布时间】:2018-06-30 00:56:50 【问题描述】:

我的服务器上运行了一个 C++ 模拟。同时还有基于 C# 的代码,主要用于统计收集。 C++ 代码生成的日志由 C# 代码格式化和使用。这两个程序在同一台机器上运行。 我将生成日志的模拟称为“生产者”,将其他将日志格式化为“消费者”的过程。

系统中有多个生产者副本在运行。事实上,系统中最多可以同时运行 20 个生产者。消费者只有一份副本。生产者日志具有唯一 ID,用于标识日志来自哪个模拟。

假设我有大量可用内存,那么生产者和消费者的最佳沟通方式是什么?

此时每个生产者最多可以生成 100MBps 的日志。因此,将产生的最高日志量将是 2GBps。我怀疑消费者可能无法吸收那么多的吞吐量,并且可能落后于生产者。我想确保如果消费者不够快,生产者不会受到背压。我假设我有足够的内存来吸收未处理的日志。

我不确定我的(最佳)选择是什么。对于我手头的问题,我想找到一种灵活的通信方法,它是 1)足够快,2)可以照顾许多生产者,单一消费者环境,3)可以利用大量内存而无需为生产者提供背压,4) 提供简单的 API,这样我就不必处理详细的通信,例如互斥共享资源等。

【问题讨论】:

【参考方案1】: 您的用例真的需要高性能的生产者-消费者配置吗?在快速完成之前,我会先专注于正确处理。 至于正确:您打算如何实施?您打算使用什么语言/技术?这与其说是在 Ubuntu 上,不如说是关于它是如何实现的。 有许多可用的生产者-消费者示例。它是进程间通信的经典案例。

因此,确定您将如何实现它,找到一些共享内存解决方案与消息传递的示例,然后尝试!做对了,然后您就可以做出更明智的决定,决定哪个更适合您的特定用例。

我想其他人不会很快回答您的问题,因为没有一种进程间通信方法优于其他方法。特别是当这个问题被孤立地提出时——没有更大的应用程序的更大背景。这些日志是干什么用的?

【讨论】:

感谢您的洞察力。我添加了您在我问的原始问题中提到的重要信息。

以上是关于Ubuntu 上最有效的进程间通信的主要内容,如果未能解决你的问题,请参考以下文章

Windows进程间的通信

对于 Mac 上的高带宽数据流,最有效的进程间通信方法是啥?

Linux进程间通信—使用共享内存

“松散”的进程间通信

Linux进程间通信——使用共享内存

Linux进程间通信——使用共享内存