Russian Qt Forum
Октябрь 04, 2024, 20:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Общий вопрос о многопоточности.  (Прочитано 4894 раз)
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« : Ноябрь 07, 2012, 21:09 »

Всем привет. Мой вопрос имеет крайне малое отношение непосредственно к Qt, но всё же я решил задать его здесь. Допустим, я решил создать некий менеджер загрузок, который будет загружать большое кол-во файлов с сервера. Каждый файл планируется загружать в отдельном потоке, процесс загрузки каждого файла будет отображаться в отдельном ProgressBar'е. Вопрос: сколько разумнее всего завести для этого потоков, и почему? Ведь, я полагаю, будет очень глупо для загрузки 100 файлов создавать 100 потоков.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Ноябрь 07, 2012, 21:33 »

Каждый файл планируется загружать в отдельном потоке, процесс загрузки каждого файла будет отображаться в отдельном ProgressBar'е. Вопрос: сколько разумнее всего завести для этого потоков, и почему? Ведь, я полагаю, будет очень глупо для загрузки 100 файлов создавать 100 потоков.
Ну это столь же глупо как делать 100 ProgressBar'ов Улыбающийся. Оптимальное число ниток давно известно: число ядер  (+ может быть) 1 (см idealThreadCount). Реализация

Код
C++ (Qt)
#pragma omp parallel for
for (size_t i = 0; i < files.size(); ++i)
LoadFile(files[i]);
 

Записан
Bepec
Гость
« Ответ #2 : Ноябрь 08, 2012, 06:57 »

Видимо парень имел в виду менеджер загрузок, подобно download master'у или торренту.

Хм. Интересно. Тогда вопрос по теме - как реализован download master или торрент? Более 50 файлов загружать одновременно - легко делают.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Ноябрь 08, 2012, 10:31 »

А если посмотреть исходники примера торрент качалки из Qt?
Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #4 : Ноябрь 08, 2012, 10:49 »

Йо, а такая есть? *полез в пыльный каталог примеров Qt*

Спасибо за наводку.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 08, 2012, 10:51 »

Код
C++ (Qt)
#pragma omp parallel for
for (size_t i = 0; i < files.size(); ++i)
LoadFile(files[i]);
 
Тут я немного промазал - так будет скачиваться столько файлов сколько ниток. Если надо 50-100 (N). тогда так
Код
C++ (Qt)
#pragma omp parallel for
for (size_t i = 0; i < jobs.size(); ++i)
LoadFile(jobs[i]);
 
Смысл впрочем тот же - заряжается контейнер задач на который натравливается бригада ниток. Структура элемента очевидна, должен знать откуда качать, куда писать и.т.п. Конечно вместо omp можно использовать concurrent (кому что нравится)

А если посмотреть исходники примера торрент качалки из Qt?
Ох уж эти готовые примеры  Улыбающийся
Записан
ssoft
Гость
« Ответ #6 : Ноябрь 09, 2012, 08:40 »

Очень легко можно организовать параллельную закачку файлов с помощью QtConcurent.
Рекомендую ознакомится.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.169 секунд. Запросов: 22.