powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Single-producer/multi-consumer queues
31 сообщений из 31, показаны все 2 страниц
Single-producer/multi-consumer queues
    #39030642
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть задачка.
Single-producer получает какой то объект и кладет в queues ,
потом каждый consumer (от 1 до ??) читает из queues .
Но удаляет только тогда, когда каждый consumer прочитал объект.

М.б. кто то решал такое уже?

Заранее спасибо.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030659
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавь счетчик к объекту. Задавай счетчиком количество читателей, каждый после прочтения уменьшает счетчик, кто уменьшил в ноль - удаляет объект из очереди.

Дополнительно контроль/защиту от двойного чтения: например писатель нумерует объекты последовательно, читатель не читает с номерами менее последнего прочитанного.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030678
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Дополнительно контроль/защиту от двойного чтения: например писатель нумерует объекты последовательно, читатель не читает с номерами менее последнего прочитанного.
Спасибо..
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030773
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Защиту от двойного чтения наверное по другому нужно делать. Иначе мы накладываемые серьезные ограничения на систему
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030775
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя как вариант, можно и так. Можно создать что-нибудь наподобие матрицы смежность, но тогда проверка на то что все прочитали объект будет занимать время O(n), что не очень приятно
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030782
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более примитивные варианты вроде раздачи каких-нибудь shared_ptr в индивидуальные очереди получателей не рассматривались?
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030783
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bdm77Добрый день!

Есть задачка.
Single-producer получает какой то объект и кладет в queues ,
потом каждый consumer (от 1 до ??) читает из queues .
Но удаляет только тогда, когда каждый consumer прочитал объект.

М.б. кто то решал такое уже?

Заранее спасибо.
С этим хорошо справляется Обзервер паттерн
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030797
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YesSqlbdm77Добрый день!

Есть задачка.
Single-producer получает какой то объект и кладет в queues ,
потом каждый consumer (от 1 до ??) читает из queues .
Но удаляет только тогда, когда каждый consumer прочитал объект.

М.б. кто то решал такое уже?

Заранее спасибо.
С этим хорошо справляется Обзервер паттерн

Спасибо.
Наверное этот патерн лучше подойдет..
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030812
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryМожно создать что-нибудь наподобие матрицы смежность, но тогда проверка на то что все прочитали объект будет занимать время O(n), что не очень приятно
Не надо никаких матриц. Да и контроля повторов можно не делать. Достаточно чтобы объекты были в связном списке, т.е. прочитал текущий, получил из текущего ссылку на следующий, уменьшил в текущем счетчик и т.д.
Если текущий первый, то просто ждем когда появится следующий.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39030844
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryМожно создать что-нибудь наподобие матрицы смежность, но тогда проверка на то что все прочитали объект будет занимать время O(n), что не очень приятно
Не надо никаких матриц. Да и контроля повторов можно не делать. Достаточно чтобы объекты были в связном списке, т.е. прочитал текущий, получил из текущего ссылку на следующий, уменьшил в текущем счетчик и т.д.
Если текущий первый, то просто ждем когда появится следующий.

Ситуация такова: у нас есть библиотека, в ней книги, их количество неизвестно. У нас есть n читателей. Книгу можно выкинуть из библиотеки когда все её прочитают. Я правильно понял ?
Т.е. доступ к любой книге произвольный. Или тут ключевое слова queue ? Тогда задачи тривиальная.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39031748
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMercuryDima Tпропущено...

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

Ситуация такова: у нас есть библиотека, в ней книги, их количество неизвестно. У нас есть n читателей. Книгу можно выкинуть из библиотеки когда все её прочитают. Я правильно понял ?
Т.е. доступ к любой книге произвольный. Или тут ключевое слова queue ? Тогда задачи тривиальная.


Задача такая...
Есть главный объект , который получает с камеры фреймы.
Есть еще один объект, который по сигналу создает N - threads (каждый threads "живет" 400 фреймов) .

Задача - главному объекту передать фрейм каждому thread .
И что бы thread не получил двойной фрейм..

Обзервер паттерн - подходит для этого.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39031786
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку С++ не содержит объектов мультизадачности на уровне language
то обсуждение решения (и его эффективности) неизбежно перетекает
в обсуждение где это будет компилироваться. Windows/Linux.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39031790
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоскольку С++ не содержит объектов мультизадачности на уровне language
Содержит, начиная с С++11 http://www.cplusplus.com/reference/multithreading/
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39031791
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоскольку С++ не содержит объектов мультизадачности на уровне language

Последние стандарты, кажется, рассматривают STL с её std::mutex и т.д. как часть языка...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39031792
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пускай автор скажет что у него.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39031844
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonПускай автор скажет что у него.

Компилируем в Win . Но я использую boost , там есть все для multithreads
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39031845
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TmaytonПоскольку С++ не содержит объектов мультизадачности на уровне language
Содержит, начиная с С++11 http://www.cplusplus.com/reference/multithreading/

C++11 вклюл в себя boost
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39032419
aeugen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77Добрый день!

Есть задачка.
Single-producer получает какой то объект и кладет в queues ,
потом каждый consumer (от 1 до ??) читает из queues .
Но удаляет только тогда, когда каждый consumer прочитал объект.

М.б. кто то решал такое уже?



А задача тестовая или реальная???

Если реальная, то зачем изобретать велосипед???
Для реальной задачи есть куча готовых решений, ZeroC , AMQ (искать по слову topic) и прочие MQ.

Исходники для них в инете валяются, можно посмотреть как реализовано.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39032585
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aeugenbdm77Добрый день!

Есть задачка.
Single-producer получает какой то объект и кладет в queues ,
потом каждый consumer (от 1 до ??) читает из queues .
Но удаляет только тогда, когда каждый consumer прочитал объект.

М.б. кто то решал такое уже?



А задача тестовая или реальная???

Если реальная, то зачем изобретать велосипед???
Для реальной задачи есть куча готовых решений, ZeroC , AMQ (искать по слову topic) и прочие MQ.

Исходники для них в инете валяются, можно посмотреть как реализовано.
1. подобные системы часто не делают глубокого копирования. Из за этого приходится гнать все данные в сообщении. Сразу же встает вопрос пропускной способности. и вообще способности прокачивать большие сообщения. особенно в разрезе вопроса ТС.
2. переусложнены для такого типа задачь.
3. + еще масса вопросов
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39032715
bdm77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OoCcaeugenпропущено...


А задача тестовая или реальная???

Если реальная, то зачем изобретать велосипед???
Для реальной задачи есть куча готовых решений, ZeroC , AMQ (искать по слову topic) и прочие MQ.

Исходники для них в инете валяются, можно посмотреть как реализовано.
1. подобные системы часто не делают глубокого копирования. Из за этого приходится гнать все данные в сообщении. Сразу же встает вопрос пропускной способности. и вообще способности прокачивать большие сообщения. особенно в разрезе вопроса ТС.
2. переусложнены для такого типа задачь.
3. + еще масса вопросов


Задача реальная!

в данном случае поток видео, минимум 1280 Х 720 (требуют full HD) , частой 10 Гц.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39032800
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39033324
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdm77Есть задачка.
Single-producer получает какой то объект и кладет в queues ,
потом каждый consumer (от 1 до ??) читает из queues .
Но удаляет только тогда, когда каждый consumer прочитал объект.
Тут правильно написано: queue s - очереди во множественном числе. Нужно именно несколько очередей - по одной у каждого consumer'а. Producer кладёт объекты во все очереди, а consumer'ы работают каждый только со своей. Таким образом не нужен счётчик, сколько consumer'ов прочитали объект.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39033335
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikНужно именно несколько очередей - по одной у каждого consumer'а. Producer кладёт объекты во все очереди, а consumer'ы работают каждый только со своей.
Если учесть что
bdm77в данном случае поток видео, минимум 1280 Х 720 (требуют full HD) , частой 10 Гц.
то получается очень неэкономное использование памяти: 1 кадр full HD в растре занимает ~6 Мб, 10 кадров для 10 подписчиков = 600 Мб.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39033344
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TpetalvikНужно именно несколько очередей - по одной у каждого consumer'а. Producer кладёт объекты во все очереди, а consumer'ы работают каждый только со своей.
Если учесть что
bdm77в данном случае поток видео, минимум 1280 Х 720 (требуют full HD) , частой 10 Гц.
то получается очень неэкономное использование памяти: 1 кадр full HD в растре занимает ~6 Мб, 10 кадров для 10 подписчиков = 600 Мб.
Кадры никуда не двигаются. в очереди ставятся только смарт поинтеры. Как замечено выше для этого и нужно deep copy в очередях.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39033370
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обработка ошибок в такой очереди будет весьма крепким орешком, однако...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39033578
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОбработка ошибок в такой очереди будет весьма крепким орешком, однако...


Там тривиальная задача с набором из 2 семафоров.

Single-producer устанавливает значение входяжего семафора
на нужное количество consumer -ов , те ломятся в кадр , а Single-producer
засыпает на выходящем семафоре.
Закончив работу consumer -ы сбрасыают исходящий семафор
и засыпают на входящем.
Single-producer меняет указатель на следующий кадр и
снова запускает consumer -ов

И так по кругу.

ТС-у нужно изучить принципы работы семафоров.

Если Single-producer Single-consumer то достаточно одного семафора,
если их разное количество то нужен набор из 2 семафоров.

Я не знаю как в винде обстоят дела с атомарностью работы
с набором семафоров , возможно для защиты набора от рассогласования
придется их защищать мутексом .
В Юниксе работа с набором семафоров атомарна из коробки.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39033581
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формально это задача по созданию
мутекса, который может преобразовываться из эксклюзивного в разделяемый.

Читатели могут пользоваться ресурсом одновременно ,
а писатели только в одиночку.

Если такой примитив сихронизации где то уже реализован ,
то можно воспользоваться им.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39033753
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРSingle-producer устанавливает значение входяжего семафора на нужное
количество consumer -ов , те ломятся в кадр , а Single-producer засыпает на выходящем
семафоре.
Закончив работу consumer -ы сбрасыают исходящий семафор и засыпают на входящем.
Single-producer меняет указатель на следующий кадр и снова запускает consumer -ов

И так по кругу.
И вот тут-то возникает вопрос: что делать если у пятого из десяти consumer-ов в ходе
работы произошла ошибка? Прервать всю работу и оповестить остальных, что последний
обработанный ими кадр нужно дропнуть? Или пропустить кадр только этим consumer-ом и
получить несогласованные потоки на выходе?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39034202
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДохтаРSingle-producer устанавливает значение входяжего семафора на нужное
количество consumer -ов , те ломятся в кадр , а Single-producer засыпает на выходящем
семафоре.
Закончив работу consumer -ы сбрасыают исходящий семафор и засыпают на входящем.
Single-producer меняет указатель на следующий кадр и снова запускает consumer -ов

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



Можно создать битовый массив при каждом кадре
пусть каждый consumer зводит свой
бит если все ОК, а потом сравнивать его с 0xFF....FF маской.
Если битовый масив маске не соотвествует значит кто то из consumer -ов
зафейлился.
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39034210
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРЕсли битовый масив маске не соотвествует значит кто то из consumer -ов
зафейлился.
"А дальше?.." (с) ПВ

Обнаружить факт ошибки - просто. Но лично мне в аналогичной задаче пока не удалось
придумать приемлемую схему реакции на ошибку. Проблема становится ещё хуже, если очередь
удлинить, позволяя тормозному продюсеру готовить следующую порцию данных в то время как
консюмеры обрабатывают предыдущие.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Single-producer/multi-consumer queues
    #39034616
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДохтаРЕсли битовый масив маске не соотвествует значит кто то из consumer -ов
зафейлился.
"А дальше?.." (с) ПВ

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


А дальше зависит от цели, которую преследует решение здачи.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Single-producer/multi-consumer queues
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]