Быстрее производитель Медленный потребитель с критическими временами

0

У меня проблемы с производителями и потребителями.

У меня есть один производитель, который производит данные очень быстро и берет данные с определенным периодом с внешнего сервера. У меня есть три потребителя, которым нужны эти данные. Потребители делают некоторые обработки по этим данным, поэтому потребители работают медленнее, чем производитель.

Я использую очередь для передачи данных, и после определенного размера я блокирую производителя и потребителей с помощью мьютексов и условных переменных. Но когда conditional_variable ждет, данные, которые поступают с сервера, будут обновлены, и когда я подожду, я пропущу некоторые данные. Как этого можно избежать?

  • 1
    Сделайте своих потребителей быстрее! Профиль и оптимизация. Или купить более быстрый компьютер.
  • 1
    В ваших рассуждениях есть простая логическая ошибка. Как только вы получите данные, они неизбежно станут устаревшими. Вы не определили серьезность спертости. Разве плохо, что микросекунда выходит из данных? Второй? Как вы можете гарантировать, что у вас вообще есть верхний предел? Возможно, потребителю нужно запросить его вместо производителя, чтобы установить разумную верхнюю границу вообще.
Показать ещё 1 комментарий
Теги:
multithreading
stl
producer-consumer

1 ответ

0

Вы не можете заблокировать сбор данных производителем без потери информации, так что все, что вы можете наладить, - это связь. Либо производитель, либо потребитель или оба требуют буферизации, поэтому поступающие данные могут быть захвачены на полной скорости, а затем доставляются на обработку данных потребителя со скоростью, с которой она может идти в ногу с этим.

В зависимости от того, что вы делаете, на самом деле может быть хорошо потерять некоторое промежуточное состояние, когда последующие события сделают его устаревшим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню