【问题标题】:Faster producer Slow consumer with critical times更快的生产者 关键时刻的慢消费者
【发布时间】:2014-02-02 16:43:44
【问题描述】:

我对生产者和消费者有意见。

我有一个生产者可以非常快速地生成数据,它从外部服务器获取特定时期的数据。我有三个需要这些数据的消费者。消费者对这些数据进行一些处理,因此消费者比生产者慢。

我使用队列来传递数据,在达到特定大小后,我会使用互斥锁和条件变量来阻塞生产者和消费者。但是当 conditional_variable 等待时,来自服务器的数据将被更新,当我等待时我错过了一些数据。如何避免这种情况?

【问题讨论】:

  • 让您的消费者更快!配置文件和优化。或者买一台速度更快的电脑。
  • 你的推理中有一个简单的逻辑错误。一旦你获得数据,它不可避免地会变得陈旧。你没有量化陈旧的严重性。数据不足一微秒是不是很糟糕?一秒?你怎么能保证你有一个上限?也许消费者需要查询它而不是生产者来设置一个合理的上限。
  • 从这个描述中你得到了入站数据并且没有地方放它。唯一的答案是在某个地方找到或腾出空间。要么压缩排队的数据,给自己一个更大的有效缓冲区,要么将其溢出到磁盘,无论哪种方式,这都会变得非常复杂、非常快,并且从那里到类似 ZeroMQ 的步骤开始看起来是一个不错的选择。

标签: c++ c multithreading stl producer-consumer


【解决方案1】:

您无法在不丢失信息的情况下阻止生产者捕获数据,因此您可以握手的只是通信。生产者或消费者或两者都需要缓冲,以便可以全速捕获到达的数据,然后以可以跟上的速度交付给消费者的数据处理。

根据您正在做的事情,当后来的事件使其过时时丢失一些中间状态实际上可能没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多