【发布时间】:2015-01-25 20:03:51
【问题描述】:
服务器控制 1 个写入器实时连续生成数据帧和 N 个可能的并发读取请求。每当阅读器向服务器发出请求时,阅读器应该能够获取最新生成的帧或等待它(如果不可用)。虽然允许 N 个不同的读取器同时“消费”同一帧,但每个单独的读取器读取同一帧的次数不得超过一次。
对于上述问题,有没有什么众所周知的算法或策略,既不会浪费太多资源,又能给读者带来良好的吞吐量?
现在我的想法是使用所谓的“三重缓冲”(每帧一个缓冲区),其中两个缓冲区由写入器交替填充,一个缓冲区由并发读取器共享。如果并发读取的数量为 0,则一旦产生了帧,则可以将相应的缓冲区与专用于读取器的缓冲区交换。这似乎是一个简单的模型,尽管所有并发读者可能会受到组中最慢读者的时间的影响。确保一个阅读器不能两次获得相同帧的问题仍然需要通过某种符合上述模型的干净方式进行同步来解决。
如果您有任何其他想法或代码(首选现代 C++)、C++ 库...我将不胜感激。
【问题讨论】:
标签: c++ multithreading performance algorithm concurrency