Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Single-producer/multi-consumer queues / 25 сообщений из 31, страница 1 из 2
17.08.2015, 12:05
    #39030642
bdm77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single-producer/multi-consumer queues
Добрый день!

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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



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

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

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

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

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



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

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

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


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

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

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


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

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


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