![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
есть задача:
на диске лежит много картинок, сразу все загрузить в память нельзя, есть ограничние по памяти скажем 2Гб. необходимо грузить по 2 штуки, проделывать некий обсчет, затем записывать результат в структуру (собсвенно это один таск и таких тасков должно быть N в зависимости от свободных ресурсов процессора или памяти). надо загрузить все ядра по максимуму. я так понимаю нужно сделать очередь тасков, скажем пары имен файлов которые надо загружать для обработки, потом создать сколько то тредов, и чтобы они брали оттуда таски с синхронизацией доступа и выполняли по мере своего освобождения. как это сделать с помощью буста? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
boost::asio::io_service+boost::thread_group |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
не очень понятно с чем есть boost::asio и как он мне поможет.
вообщем я в самом бусте не очень хорошо пока ориентируюсь. что если сделать так. создать массив всех изображений с путями к ним. загрузить N изображений, где N четное больше 2 и суммма изображений занимает меньше отведенной под это памяти. составить пары изображений из загруженных изображений и создать кол-во тредов равное кол-ву пар (правильно ли это?) (треды можно как раз создать через thread group), либо какое то фиксированное кол-во тредов, либо через hardware concurency определить кол-во тредов и соответственно кол-во пар изображений перед загрузкой. можно ли обращаться к одним и тем же изображениям одновременно на чтение? или вообще неплохо было бы чтобы 1 тред загружал изображения для следущей итерации, пока другие треды работают с уже загруженными парами. Это сообщение отредактировал(а) mrgloom - 11.11.2011, 15:31 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
создаешь нужное кол-во потоков. создаешь объект типа io_service. даешь ему "работу" чтоб не завершались потоки если вдруг задачи в очереди закончатся или до тех пор пока ты еще не добавил задачи. в каждом из потоков создаешь объект asio::io_service::strand чтоб гарантировать что задачи каждого конкретного потока будут выполняться последовательно(ведь io_service один, а потоков несколько). в каждом из потоков добавляешь в очередь задачи при помощи asio::io_service::post. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
К сожалению, ASIO имеет название, не совсем соответствующее библиотеке. И если не знать, что кроме асинхронного ввода/вывода она позволяет еще и очередью задач манипулировать, то можно эту ее классную особенность упустить из виду. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |