【发布时间】:2018-06-30 00:56:50
【问题描述】:
我的服务器上运行了一个 C++ 模拟。同时还有基于 C# 的代码,主要用于统计收集。 C++ 代码生成的日志由 C# 代码格式化和使用。这两个程序在同一台机器上运行。 我将生成日志的模拟称为“生产者”,将其他将日志格式化为“消费者”的过程。
系统中有多个生产者副本在运行。事实上,系统中最多可以同时运行 20 个生产者。消费者只有一份副本。生产者日志具有唯一 ID,用于标识日志来自哪个模拟。
假设我有大量可用内存,那么生产者和消费者的最佳沟通方式是什么?
此时每个生产者最多可以生成 100MBps 的日志。因此,将产生的最高日志量将是 2GBps。我怀疑消费者可能无法吸收那么多的吞吐量,并且可能落后于生产者。我想确保如果消费者不够快,生产者不会受到背压。我假设我有足够的内存来吸收未处理的日志。
我不确定我的(最佳)选择是什么。对于我手头的问题,我想找到一种灵活的通信方法,它是 1)足够快,2)可以照顾许多生产者,单一消费者环境,3)可以利用大量内存而无需为生产者提供背压,4) 提供简单的 API,这样我就不必处理详细的通信,例如互斥共享资源等。
【问题讨论】: