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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопросы по многопоточности  (Прочитано 4685 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Октябрь 14, 2014, 15:27 »

Привет, друзья!
Решил затронуть тему решения задач с помощью многопоточности и столкнулся с некоторыми вопросами.
1) Если у меня производится чтение большого текстового файла, имеет ли смысл раздельть потоки на чтение и парсинг?
2) Имеется большое количество данных, которое необходимо обработать по одному и тому же алгоритму, предположим проверка на >0 с последующим внесением таких чисел в вектор. Что лучше использовать при работе с 4 потоками: QAtomicInteger или разделить массив на 4 части и передать каждому потоку?
Записан
dmitriym
Гость
« Ответ #1 : Октябрь 14, 2014, 15:30 »

1) Если возможно начать парсить до того, как считался весь файл, то возможно имеет
2) Лучше тот алгоритм, где потоки не соревнуются как ресурсы. Делить на 4 части
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Октябрь 14, 2014, 15:38 »

1) Если возможно начать парсить до того, как считался весь файл, то возможно имеет
2) Лучше тот алгоритм, где потоки не соревнуются как ресурсы. Делить на 4 части

2) что если у меня свободно только 1 ядро на момент выполнения? получается, что 3 остальных потока будут долго обрабатываться? Или же они будут перекидываться на свободное ядро по очереди?
Записан
dmitriym
Гость
« Ответ #3 : Октябрь 14, 2014, 16:10 »

https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%82%D0%B5%D1%81%D0%BD%D1%8F%D1%8E%D1%89%D0%B0%D1%8F_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C
Записан
dmitriym
Гость
« Ответ #4 : Октябрь 14, 2014, 16:12 »

http://www.dtf.ru/articles/read.php?id=39888&page=2
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Октябрь 14, 2014, 16:24 »

Все равно пока не понимаю, каким образом будет выполняться переключение потоков.
Допустим, есть 4 ядра в ОС Win. На 3 из них идет расчёт в сторонней программе - загруженность 100%. Моя программа запускает 4 потока с интенсивными вычислениями.
Могут ли потоки прыгать между ядрами?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Октябрь 14, 2014, 16:44 »

1) Если у меня производится чтение большого текстового файла, имеет ли смысл раздельть потоки на чтение и парсинг?
Практически нет.

2) Имеется большое количество данных, которое необходимо обработать по одному и тому же алгоритму, предположим проверка на >0 с последующим внесением таких чисел в вектор. Что лучше использовать при работе с 4 потоками: QAtomicInteger или разделить массив на 4 части и передать каждому потоку?
Здесь упирается в "предположим". Если это такое действие как > 0, то "выйгрыш" очень мал (если вообще есть), игра не стоит свеч.

ОС сам распределяет нагрузку, Вас не должно волновать какое ядро свободно и какие задачи еще выполняются. Потоки всегдв прыгают между ядрами, чтобы закрепить поток за ядром надо сильно постараться (и то не на всех ОС). Важно чтобы "кластер" (то что поручается 1 нитке) был достаточно велик, дать нитке следующую задачу всегда достаточно накладно, поэтому при малых задачах получается "пройгрыш" - все уходит в переключения
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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