Загрузка пакета изображений - распределение потоков - PullRequest
0 голосов
/ 20 января 2012

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

Я не указываю SO, потому что мой проект кроссплатформенный.

Я думаю, что я буду работать в основном с PNG, то есть распаковка не замедлится, но будет некоторая декомпрессия.

Кроме того, если я в конечном итоге создаю по одному потоку для каждого изображения, то достаточно ли велика нагрузка на поток, чтобы значительно замедлить мой процесс?

Ответы [ 2 ]

2 голосов
/ 21 января 2012

Один поток на диск кажется разумным началом.Вы можете сделать это параметром настройки времени выполнения, чтобы увидеть, что лучше всего работает, особенно если есть или могут быть нелокальные сетевые диски (т.е. с высокой задержкой), или, как другие предлагали, есть какая-либо декомпрессия или обработка видеодолжно быть сделано.

Одна тема на изображение, опять же, не очень хорошая идея, как сообщают другие.Вам понадобятся некоторые очереди ПК для подачи в поток (-ы) объектов, которые содержат буфер изображения + спецификацию файла, а также для возврата тех же объектов после завершения загрузки - постоянное создание / прекращение / уничтожение потоков является расточительным, трудным и подверженным катастрофе.

2 голосов
/ 20 января 2012
  • Иногда потребительская архитектура производителя достаточно хороша.
  • В других случаях то, что вы описываете, также может работать, учитывая, что у вас нет большего количества потоков, которые могут обрабатывать доступные процессоры (то есть больше потоков, чем # процессоров * 2 обычно (не всегда)приводит к избиению).

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

Я предлагаю попробовать однопоточное приложение .

...