【发布时间】:2014-02-02 16:43:44
【问题描述】:
我对生产者和消费者有意见。
我有一个生产者可以非常快速地生成数据,它从外部服务器获取特定时期的数据。我有三个需要这些数据的消费者。消费者对这些数据进行一些处理,因此消费者比生产者慢。
我使用队列来传递数据,在达到特定大小后,我会使用互斥锁和条件变量来阻塞生产者和消费者。但是当 conditional_variable 等待时,来自服务器的数据将被更新,当我等待时我错过了一些数据。如何避免这种情况?
【问题讨论】:
-
让您的消费者更快!配置文件和优化。或者买一台速度更快的电脑。
-
你的推理中有一个简单的逻辑错误。一旦你获得数据,它不可避免地会变得陈旧。你没有量化陈旧的严重性。数据不足一微秒是不是很糟糕?一秒?你怎么能保证你有一个上限?也许消费者需要查询它而不是生产者来设置一个合理的上限。
-
从这个描述中你得到了入站数据并且没有地方放它。唯一的答案是在某个地方找到或腾出空间。要么压缩排队的数据,给自己一个更大的有效缓冲区,要么将其溢出到磁盘,无论哪种方式,这都会变得非常复杂、非常快,并且从那里到类似 ZeroMQ 的步骤开始看起来是一个不错的选择。
标签: c++ c multithreading stl producer-consumer