Ubuntu上最高效的进程间通信

时间:2018-06-30 00:56:51

标签: tcp pipe ipc

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

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

假设我有大量可用内存,那么生产者和消费者进行交流的最佳方法是什么?

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

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

1 个答案:

答案 0 :(得分:0)

  • 您的用例是否真的需要高性能的生产者-消费者配置?首先,我会先专注于正确处理它。
  • 就正确而言:您打算如何实施?您计划使用哪种语言/技术?与其说是在Ubuntu上,不如说是它的实现方式。
  • 有许多生产者-消费者示例。它是进程间通信的经典案例。

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

我想其他人并不能很快回答您的问题,因为没有一种进程间通信方法可以胜过其他方法。尤其是在孤立地提出问题时-没有更大的上下文用于更大的应用程序。这些日志的全部用途是什么?