一个服务器控制1个写入器实时连续生产数据帧和N个可能的并发读请求。每当读者向服务器发出请求时,读者应该能够获得最新生成的帧或等待它(如果不可用)。尽管允许 N 个不同的阅读器同时“消费”同一帧,但每个阅读器不得多次阅读同一帧。
对于上述问题,有没有什么著名的算法或策略,既不会浪费太多资源,又能给读者带来良好的吞吐量?
目前我的想法是使用所谓的“三重缓冲”(每帧一个缓冲区),其中两个缓冲区由写入器交替填充,一个缓冲区由并发读取器共享。如果并发读取数为0,则一旦产生一帧,就可以将相应的缓冲区与读取器专用缓冲区进行交换。这似乎是一个简单的模型,尽管所有并发阅读器可能会受到组中最慢阅读器的时间影响。确保一个读者不能两次获得同一帧的问题仍然需要通过某种适合上述模型的干净方式的同步来解决。
如果您有任何其他想法或代码(首选现代 C++),C++ 库...我将不胜感激。
最佳答案
Disruptor 项目负责人:Martin Thompson有这个新项目:Aeron而且速度 super 快。更重要的是,它已经支持C++ api。查看 highscalability 的介绍视频和文章:
https://www.youtube.com/watch?v=tM4YskS94b0 http://highscalability.com/blog/2014/11/17/aeron-do-we-really-need-another-messaging-system.html
关于c++ - 具有 1 个写入器和 N 个并发读取器的实时数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28140870/