872 / 459 / 90
Регистрация: 10.06.2014
Сообщений: 2,665
1

Многопоточность. А правдивы ли рекомендации?

18.06.2017, 13:45. Показов 1376. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Обычно советуют создавать количество потоков программы не более числа количества ядер процессора, т.к считается, что это то количество потоков, которое может быть выполнено параллельно для одной программы.
Допустим если ядер 5, то рекомендуемое количество потоков, созданных например при помощи std::thread - 5.

Но сама ОС ведь является тем самым контролером всех этих потоков, и является такой же программой для процессора как и остальные, а значит так же всегда монопольно занимает полностью как минимум одно ядро, что бы управлять своими задами, ведь так? Так каково максимальное количество потоков одной программы может быть выполнено параллельно с учетом количества ядер?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2017, 13:45
Ответы с готовыми решениями:

Рекомендации по ПК
Бюджет не очень большой, но нужно качественную сборку. Нормально ли будет: МП :...

рекомендации
у меня нет телефонной линии.но очень хочется быть в интернете.какой выход рекомендуете!!

Скрипт рекомендации
Хочу на сайт засунуть скрипт рекомендации, ну типа если сайт понравился, то посоветуй другу. Скрипт...

Рекомендации ОС linux
Всем привет! С линухой не знаком-наглухо. Подскажите какую версию воткнуть. Задачи более чем...

13
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
18.06.2017, 13:48 2
Цитата Сообщение от Undisputed Посмотреть сообщение
а значит так же всегда монопольно занимает полностью как минимум одно ядро
Откуда такие сведения?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.06.2017, 13:53 3
Цитата Сообщение от Undisputed Посмотреть сообщение
Обычно советуют создавать количество потоков программы не более числа количества ядер процессора
активных потоков.
которые постоянно кушают какие то задачи.

потоки, которые спят большую часть времени можно создавать столько,
сколько нужно.
Цитата Сообщение от Undisputed Посмотреть сообщение
Так каково максимальное количество потоков одной программы может быть выполнено параллельно с учетом количества ядер?
столько, сколько ядер процессора очевидно жеж.

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

кванты времени для них никто не отменял.

"количество активных тредов по количеству ядер" - это такой универсальный оптимум,
а не серебряная пуля, которая что то там вам априори будет гарантировать.
2
nmcf
18.06.2017, 13:58
  #4

Не по теме:

hoggy, а ОС технически может зарезервировать себе ядро?

0
hoggy
18.06.2017, 14:01
  #5

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
а ОС технически может зарезервировать себе ядро?
конечно может.

0
872 / 459 / 90
Регистрация: 10.06.2014
Сообщений: 2,665
18.06.2017, 14:40  [ТС] 6
nmcf,
Ну я так подумал, потому что ОС контролирует работу пользовательских программ, и всегда готова что-то следать. Это наводит на мысль что работает она постоянно, пока включен компьютер... А что бы она работала по идее ей нужно выполняться как минимум на одном ядре...

hoggy,
Я имел ввиду что говорят, что потоки программы могут быть выполнены параллельно в том количестве, которое равно количеству ядер. Но тут возникает вопрос, чем занята ОС в такой момент? Она же должна выполняться то же, а значит занимать какое то ядро. Потому что если она хотя бы временно слезет со своего ядра, то например не сможет среагировать на какую то важную вещь, например при наступлении таймаута т.к будет спать... Или в таких случаях одно из ядер каким то образом заставляют освободить дорогу для ОС, принудительно меняя контекст? Если так, то выходит есть некая аппаратная реализация которая работает вплотную с ОС и помогает ей в этих делах?

Вот это не понятно...
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
18.06.2017, 14:49 7
ОС прерывания использует, никто не получает ядра в бесконтрольное владение.
0
872 / 459 / 90
Регистрация: 10.06.2014
Сообщений: 2,665
18.06.2017, 15:03  [ТС] 8
nmcf,
Если ОС прерывается, то как тогда она реагирует скажем на то, когда приходит время выполнить определенную задачу в определённое время, особенно если это ОС реального времени? Так же интересует кто решает, когда пробудить ОС что бы она и дальше могла управлять процессами
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
18.06.2017, 15:09 9
Я же говорю: там используются аппаратные прерывания от таймера. За счёт этого всё синхронизируется, а ОС получает управление.
Есть толстая книжка Windows Internals, там (наверное) объясняют подробнее.
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
18.06.2017, 15:18 10
Лучший ответ Сообщение было отмечено Undisputed как решение

Решение

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

Если на процессоре несколько ядер, то ядро исполняется на каждом ядре. Т.е. описанный выше процесс проходит одновременно на нескольких ядрах. Естественно, что в этом случае различные пользовательские задачи могут одновременно исполняться на различных ядрах. Но ОС в моенты прерываний в любом случае исполняется на каждом из ядер. Т.е. нет такого, что операционная система монопольно сидит на каком-то ядре и раздаёт ядра для других задач
2
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
18.06.2017, 15:19 11
Undisputed, Танненбаума читать, срочно
1
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
18.06.2017, 15:21 12
Цитата Сообщение от Evg Посмотреть сообщение
Т.е. нет такого, что операционная система монопольно сидит на каком-то ядре и раздаёт ядра для других задач
Ну может, и есть такая реализация где-то.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
18.06.2017, 15:25 13
Цитата Сообщение от nmcf Посмотреть сообщение
Ну может, и есть такая реализация где-то
Я не специалист, но как-то интуитивно в этом сомневаюсь. Сильно подозреваю, что без этого невозможно было бы изменить задачу, исполняемую на процессоре
0
872 / 459 / 90
Регистрация: 10.06.2014
Сообщений: 2,665
18.06.2017, 15:37  [ТС] 14
Evg,
Похоже на правду, спасибо!) Потому что монопольное владение на одноядерной системе привело бы ни к чему... Теперь понял

DrOffset,
Спасибо за совет)
0
18.06.2017, 15:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2017, 15:37
Помогаю со студенческими работами здесь

Рекомендации по сборке ПК за 1к$
Доброго времени суток. Нужна помощ в сборке ПК. Бюджет до 1к$. К сожалению я не спец в этом...

Рекомендации по дизайну!
Всем привет.... Есть сайт в разработке, всего одна страница: Дайте пжта рекомендации по...

Рекомендации по сборке
Всем привет. Передумал брать Xeon, выбрал i7. Сборка получилась следующая: Процессор: Intel Core...

Критика и рекомендации
Всем, добрый день! Тут очень популярна критика сайтов от профи! Будьте так добры посмотрите мой...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru