Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/40: Рейтинг темы: голосов - 40, средняя оценка - 4.50
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

Есть ли смысл создавать потоки количество которых больше чем количество ядер процессора?

29.10.2016, 13:09. Показов 8764. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сабж. Есть ли смысл? Ведь одновременно одно ядро процессора не может выполнять более одной задачи (а поток это задача)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2016, 13:09
Ответы с готовыми решениями:

Имеет ли смысл создавать больше потоков, чем ядер в процессоре?
Всем привет! Такой вопрос, имеет ли смысл создавать больше потоков, чем ядер в процессоре? if (не имеет) { то считаются ли...

Найти количество строк, в которых количество отрицательных элементов больше, чем количество положительных.
Двумерные массивы. Задание 1. В каждом варианте дан двумерный массив A из N строк и М столбцов.Если в задаче над элементами массива...

Найти количество строк, в которых количество отрицательных элементов больше, чем количество положительных
Найти количество строк, в которых количество отрицательных элементов больше, чем количество положительных.

35
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2016, 15:02
Зависит от того, что делает поток. Если потоки работают, например, с медленными устройствами типа файла или сети, то в этом случае возникают долгие (по процессорным меркам) паузы, в которых процессор простаивает, а второй поток эти паузы может эффективно заполнить. Если потоки занимаются рассчётами (т.е. сильно нагружают процессор), то большого смысла нет
4
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
29.10.2016, 15:24  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
то в этом случае возникают долгие (по процессорным меркам) паузы, в которых процессор простаивает, а второй поток эти паузы может эффективно заполнить
То есть вы хотите сказать, есть допустим 5 ядер и 5 потоков и все они работают с файлами что является долгой операцией в понятиях процессора. И если какой то поток работает не всегда и может иметь простой, то другой поток может занять этот простой для своих задач(которые отличаются от задач простаивающего потока). Верно?

Если правильно понимаю, то это не всегда может быть выгодно. Потому что простаивающий поток чье место займет иной поток может быть "важнее" для работы жизни приложения. А по факту менее важный поток который вклинился в этот самый простой может мешать выполняться тем потокам которые делают основную работу(один из главных пяти закончил свою работу и теперь так же ждет вклинившийся 6-ой поток который выполняет менее полезную работу). Я прав?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2016, 15:57
"Простой" это немного другое. Допустим, поток обратился к файлу. Делается это через ОС. ОС увидела, что данные нигде не закэшированы и полезла на диск. Обращение на диск занимается тысячи (а может и сотни тысяч) тактов и ОС об этом знает. В случае одного потока, ОС настроит процессор таким образом, чтобы он, грубо говоря, щёлкал вхолостую (это я назвал "простой"), дожидаясь, пока не придут данные с диска. В случае двух потоков ОС может поставить на исполнение на процессор второй поток, коль скоро процессор всё равно работает впустую

Цитата Сообщение от sys_beginner Посмотреть сообщение
Если правильно понимаю, то это не всегда может быть выгодно
Что выгодно, а что нет, ОС знать не может в принципе. Это может знать только человек. Для того и придумали приоритеты у процессов, чтобы давать подсказку ОС о том, какай процесс важнее

Добавлено через 1 минуту
Цитата Сообщение от Evg Посмотреть сообщение
сильно нагружают процессор
В этом контексте "сильно" означает "эффективно", т.е. процессор постоянно занят вычислениями, а не ожиданиями данных с медленных устройств
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
29.10.2016, 16:03  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Что выгодно, а что нет, ОС знать не может в принципе. Это может знать только человек
Выгодно имелось ввиду с точки зрения разработчика.

Цитата Сообщение от Evg Посмотреть сообщение
В случае одного потока, ОС настроит процессор таким образом, чтобы он, грубо говоря, щёлкал вхолостую (это я назвал "простой"), дожидаясь, пока не придут данные с диска. В случае двух потоков ОС может поставить на исполнение на процессор второй поток, коль скоро процессор всё равно работает впустую
А как ОС переключит задачи если файл ещё не считан? Не могут же на одном ядре исполняться две задачи одновременно? А если переключит задание на более легковесный поток, то файл просто не будет считан в связи с тем что ядро переключилось на другое задание.

Или я чего то не понимаю?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2016, 16:34
Лучший ответ Сообщение было отмечено Undisputed как решение

Решение

Цитата Сообщение от sys_beginner Посмотреть сообщение
А как ОС переключит задачи если файл ещё не считан?
А нет принципиальной разницы между тем, выполняются полезные действия потока, или чтение файла. Есть планировщик задач, который каждые (условно) 0.01 секунд решает, которую из потоков/процессов будет исполнять процессор. Если, к примеру, планировщик решил, что надо бы исполнить процесс А, но увидит, что процесс А находится в состоянии ожидания данных от диска, а данные от диска ещё не пришли, то планировщик поставит на исполнение процесс Б

Если имеется один процессор (ядро) и десять процессов, то процессор их будет исполнять по очереди. Сначала 0.01 секунду будет исполнять первый процесс, потом 0.01 секунду будет исполнять второй процесс и так далее по кругу. Если у процессов есть приоритеты, то очередь будет выглядеть по другому. Например, 0.05 секунд исполнять процесс с большим приоритетом, а потом по 0.01 секунды процессы с маленьким приоритетом
3
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
29.10.2016, 16:49  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
но увидит, что процесс А находится в состоянии ожидания данных от диска, а данные от диска ещё не пришли, то планировщик поставит на исполнение процесс Б
Но в момент передачи данных задание как я понимаю не будет переключение задания?

Цитата Сообщение от Evg Посмотреть сообщение
Например, 0.05 секунд исполнять процесс с большим приоритетом, а потом по 0.01 секунды процессы с маленьким приоритетом
А если приоритет не задан явно, то ОС определяет приоритеты по эффективности работы заданий с точки зрения процессора? То есть кто более эффективно использует процессорное время того и продвигает вперед?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2016, 17:16
Цитата Сообщение от sys_beginner Посмотреть сообщение
Но в момент передачи данных задание как я понимаю не будет переключение задания?
Как только процесс попросил данные с диска, ОС отправит запрос на диск и в своих таблицах пометит процесс, как находящийся в состоянии ожидания. После чего поставит на процессор следующий процесс

Цитата Сообщение от sys_beginner Посмотреть сообщение
А если приоритет не задан явно, то ОС определяет приоритеты по эффективности работы заданий с точки зрения процессора? То есть кто более эффективно использует процессорное время того и продвигает вперед?
Если приоритет не задан, то всё равно есть какой-то приоритет по умолчанию. В случае равенства приоритетов ОС будет процессам выделять равное количество времени. Разумеется, только тем процессам, которые находятся в состоянии "на исполнении". Если процесс находится в состоянии "на ожидании (не важно чего)", то такой процесс не будет ставиться на исполнение
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
29.10.2016, 17:24  [ТС]
Evg,
Плохо понимаю почему вы говорите именно про процессы когда речь идет о потоках
Если один поток попросил данные с диска это ведь не означает что процесс-владелец этого потока на время будет вытеснен другим процессом.
Этот процесс может остаться активным потому что второй его поток совершает более быстрые вычисления и на него может быть переключен контекст и выйдет так, что процесс который является контейнером для двух потоков все равно останется активным.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2016, 18:23
Цитата Сообщение от sys_beginner Посмотреть сообщение
Плохо понимаю почему вы говорите именно про процессы когда речь идет о потоках
С точки зрения ОС между ними нет разницы. Возможно, что в терминологии программистов под windows это какие-то разные понятия, но их можно заменить на какое-нибудь абстрактное понятие типа "ветвь исполнения", которая рассматривается как процесс или поток. Т.е. что-то, что надо исполнить

Цитата Сообщение от sys_beginner Посмотреть сообщение
Если один поток попросил данные с диска это ведь не означает что процесс-владелец этого потока на время будет вытеснен другим процессом
Если у нас одно ядро, то два потока (или два процесса, или процесс и поток - разницы никакой) в любом случае исполняются по очереди. Если один из потоков попросил данные из файла, то второй поток в этот момент гарантированно НЕ исполняется, т.е. с точки зрения ОС он представляет собой просто набор данных (которые есть, грубо говоря, сохранённые значения регистров), сохранённых где-то в памяти

Цитата Сообщение от sys_beginner Посмотреть сообщение
Этот процесс может остаться активным потому что второй его поток совершает более быстрые вычисления
Для ОС и процессора нет таких понятий, как "более быстрые вычисления". Они есть только в твоей голове и должны быть сконвертированы в понятную для ОС конструкцию "приоритет исполнения". А процессору начхать даже на приоритеты. Что ему дали исполнять, то он и исполняет. Он понятия не имеет о потоках, процессах, приоритетах и т.п.
3
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
29.10.2016, 19:38  [ТС]
Evg,
Спасибо
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.10.2016, 20:12
Собственно, ещё одну мысль забыл сказать.

Если смотреть в диспетчер задач, то там обычно загрузка процессора измеряется в процентах. Допустим, у нас одно ядро и указано, что его загрузка 70%. Загрузка в 70% вовсе не означает, что работает только 70% транзисторов в процессоре или процессор работает на 70% от своей максимальной частоты или любые другие подобные соображения. А означает, что 70% процессорного времени тратится на исполнение пользовательских задача и 30% времени процессор щёлкает впустую. Т.е. находится в исполнении кодов ОС, которые выполняют циклы холостого хода или что-то подобное (я точно не знаю). Во время исполнения этих пустых кодов в процессоре действительно задействовано меньше транзисторов, т.к. на исполнение nop'а требуются совсем не такие усилия, как, например, на исполнение операции вычисления квадратного корня. Ну и, очевидно, при исполнении цикла холостого хода процессор меньше греется. Но процессор работает постоянно. А когда нет полезной нагрузки, то современные процессоры умею ещё и частоту понижать. Но пока ещё не изобрели технологий, которые для многоядерного процессора отключали бы ненужные в данный момент ядра (а это могло бы привести к ещё большей экономии энергии)
3
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
30.10.2016, 01:15  [ТС]
Evg,
Интересное замечание. Это конечно плохо. Зачем делать вид что работаешь если работы просто нет и все об этом знают?
Надеюсь этот пробел в архитектуре процессоров будет исправлен
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
30.10.2016, 01:23
Цитата Сообщение от Evg Посмотреть сообщение
Но пока ещё не изобрели технологий, которые для многоядерного процессора отключали бы ненужные в данный момент ядра (а это могло бы привести к ещё большей экономии энергии)
Может, 10-ядерные процессоры для мобил это умеют ?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.10.2016, 12:04
Я не настолько хорошо знаю устройство низкоуровневых вещей, чтобы ответить на эти вопросы. У меня даже нет хотя бы соображений на тему, а где вообще проблемы - в процессоре или в ОС.

Цитата Сообщение от zer0mail Посмотреть сообщение
Может, 10-ядерные процессоры для мобил это умеют ?
Телефон - это тот же компьютер, но гораздо более примитивный. Вряд ли там принцип работы процессора чем-то сильно отличается

Добавлено через 22 минуты
Когда-то давно объяснял, мало ли вдруг пригодится (хотя на первый взгляд кажется, что тут всё слишком далеко от вопроса про многопоточность)

Своя ОС для чайника (продолжение двумя постами ниже)
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
30.10.2016, 15:39
Цитата Сообщение от Evg Посмотреть сообщение
Вряд ли там принцип работы процессора чем-то сильно отличается
Тут важны детали, не только принципы. Цитата из https://www.overclockers.ru/ha... revom.html

Новая однокристальная платформа использует технологию CorePilot, которая позволяет максимально задействовать наиболее производительные ядра при тяжёлой нагрузке, и сразу же отключает их при завершении выполнения ресурсоёмких задач.

В Core Ix ядра не делятся на высоко/низко производительные и достаточно снижения частоты.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.10.2016, 16:00
То, что по ссылке - это в общем-то не процессор, а целый компьютер (или может быть даже что-то типа нескольких компьютеров, объединённых в сеть).

На видеокартах, насколько я знаю, в видеопроцессор зашиты не только сами исполнительные ядра, но ещё и какие-то устройства, которые по смыслу выполняют функции операционной системы - занимаются планированием заданий и раскидыванием их по вычислительным ядрам. На этой однокристальной платформе из ссылки, возможно, тоже что-то подобное (т.е. что-то типа ОС, встроенного в железо). Такие устройства принципиально сильно отличаются от "обычных" процессоров

Но в любом случае я предметно тут ничего не могу сказать. Если на современных настольных/серверных процессорах нет возможности отключать ядра, то наверное для этого есть какая-то причина

Добавлено через 1 минуту
Цитата Сообщение от zer0mail Посмотреть сообщение
достаточно снижения частоты
Достаточно для чего? Топливо-то всё равно будет потребляться. Снижение частоты, так же как и кэш - это вещи, которые появились не от хорошей жизни, а для компенсации тех или иных проблем (но полностью проблемы не решают)

Добавлено через 2 минуты
Не... по ходу я загнул. У того, что называется "система на кристалле", насколько я понял, нету устройств, выполняющих роль планирования заданий
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
30.10.2016, 20:21
Цитата Сообщение от Evg Посмотреть сообщение
но полностью проблемы не решают
Смешно. Что Вы считаете полным решением проблемы? Процессор с бесконечной частотой и нулевым потреблением? Или что-то более реальное?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.10.2016, 21:17
Цитата Сообщение от zer0mail Посмотреть сообщение
Что Вы считаете полным решением проблемы?
Очевидно, что нулевое потребление энергии ядром в случае, когда нет никакой полезной нагрузки. И, например, гарантированно трёхтактные операции чтения из памяти

Судя по всему, тема начинает превращаться в срач, так что на всякий случай умолкаю
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
02.11.2016, 16:34
sys_beginner, тебе стоит почитать про то, что такое concurrency, а что такое parallelism, зачем они нужны и чем отличаются.
Осознать, что существуют не только системные потоки, но и концепция green threads. Разобраться с ней.
Принять к сведению существование hyper-threading technology, чтобы понимать, что кол-во логических процессоров может быть больше кол-ва физических.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.11.2016, 16:34
Помогаю со студенческими работами здесь

Вывести номера столбцов, в которых количество отрицательных элементов больше, чем количество положительных
Помогите пожалуйста решить задачу Матрицу D(8, 9) заполнить целыми случайными числами в диапазоне от -100 до 100. Вывести номера...

Подсчитайте количество наборов, в которых как количество десяток, так и количество черных карт больше половины.
Не понятно как-то это все(( Есть аналогично: Из колоды в 36 карт вытаскивают случайным образом 5 карт. Подсчитайте количество наборов, в...

Узнать количество ядер процессора
Какой в питоне правильный способ узнать количество ядер текущей машины?

Температура процессора i5 3470 (+количество ядер)
Здравствуйте , сегодня преобрёл б.у. проц i5 3470 4х ядерный на материнку H61M-K , до этого стоял 2х ядерный i3 , поставил пока без...

Можно ли подделать количество ядер процессора
я зна есть файлы которые изменяют реестр после которых компьтер думает что к примеру у него sp3 а не sp2 я сам таки пользовался можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru