Название: Вопросы по многопоточности Отправлено: __Heaven__ от Октябрь 14, 2014, 15:27 Привет, друзья!
Решил затронуть тему решения задач с помощью многопоточности и столкнулся с некоторыми вопросами. 1) Если у меня производится чтение большого текстового файла, имеет ли смысл раздельть потоки на чтение и парсинг? 2) Имеется большое количество данных, которое необходимо обработать по одному и тому же алгоритму, предположим проверка на >0 с последующим внесением таких чисел в вектор. Что лучше использовать при работе с 4 потоками: QAtomicInteger или разделить массив на 4 части и передать каждому потоку? Название: Re: Вопросы по многопоточности Отправлено: dmitriym от Октябрь 14, 2014, 15:30 1) Если возможно начать парсить до того, как считался весь файл, то возможно имеет
2) Лучше тот алгоритм, где потоки не соревнуются как ресурсы. Делить на 4 части Название: Re: Вопросы по многопоточности Отправлено: __Heaven__ от Октябрь 14, 2014, 15:38 1) Если возможно начать парсить до того, как считался весь файл, то возможно имеет 2) Лучше тот алгоритм, где потоки не соревнуются как ресурсы. Делить на 4 части 2) что если у меня свободно только 1 ядро на момент выполнения? получается, что 3 остальных потока будут долго обрабатываться? Или же они будут перекидываться на свободное ядро по очереди? Название: Re: Вопросы по многопоточности Отправлено: dmitriym от Октябрь 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
Название: Re: Вопросы по многопоточности Отправлено: dmitriym от Октябрь 14, 2014, 16:12 http://www.dtf.ru/articles/read.php?id=39888&page=2
Название: Re: Вопросы по многопоточности Отправлено: __Heaven__ от Октябрь 14, 2014, 16:24 Все равно пока не понимаю, каким образом будет выполняться переключение потоков.
Допустим, есть 4 ядра в ОС Win. На 3 из них идет расчёт в сторонней программе - загруженность 100%. Моя программа запускает 4 потока с интенсивными вычислениями. Могут ли потоки прыгать между ядрами? Название: Re: Вопросы по многопоточности Отправлено: Igors от Октябрь 14, 2014, 16:44 1) Если у меня производится чтение большого текстового файла, имеет ли смысл раздельть потоки на чтение и парсинг? Практически нет. 2) Имеется большое количество данных, которое необходимо обработать по одному и тому же алгоритму, предположим проверка на >0 с последующим внесением таких чисел в вектор. Что лучше использовать при работе с 4 потоками: QAtomicInteger или разделить массив на 4 части и передать каждому потоку? Здесь упирается в "предположим". Если это такое действие как > 0, то "выйгрыш" очень мал (если вообще есть), игра не стоит свеч. ОС сам распределяет нагрузку, Вас не должно волновать какое ядро свободно и какие задачи еще выполняются. Потоки всегдв прыгают между ядрами, чтобы закрепить поток за ядром надо сильно постараться (и то не на всех ОС). Важно чтобы "кластер" (то что поручается 1 нитке) был достаточно велик, дать нитке следующую задачу всегда достаточно накладно, поэтому при малых задачах получается "пройгрыш" - все уходит в переключения |