|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
Многопоточность. А правдивы ли рекомендации?18.06.2017, 13:45. Показов 1690. Ответов 13
Метки нет (Все метки)
Обычно советуют создавать количество потоков программы не более числа количества ядер процессора, т.к считается, что это то количество потоков, которое может быть выполнено параллельно для одной программы.
Допустим если ядер 5, то рекомендуемое количество потоков, созданных например при помощи std::thread - 5. Но сама ОС ведь является тем самым контролером всех этих потоков, и является такой же программой для процессора как и остальные, а значит так же всегда монопольно занимает полностью как минимум одно ядро, что бы управлять своими задами, ведь так? Так каково максимальное количество потоков одной программы может быть выполнено параллельно с учетом количества ядер?
0
|
|
| 18.06.2017, 13:45 | |
|
Ответы с готовыми решениями:
13
рекомендации Скрипт рекомендации |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 18.06.2017, 13:48 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 18.06.2017, 13:53 | |||
|
которые постоянно кушают какие то задачи. потоки, которые спят большую часть времени можно создавать столько, сколько нужно. другое дело, что 5ть ядер не гарантируют вам, что 5ть тредов будут пырять без остановки. кванты времени для них никто не отменял. "количество активных тредов по количеству ядер" - это такой универсальный оптимум, а не серебряная пуля, которая что то там вам априори будет гарантировать.
2
|
|||
| 18.06.2017, 13:58 | |
|
Не по теме: hoggy, а ОС технически может зарезервировать себе ядро?
0
|
|
| 18.06.2017, 14:01 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.06.2017, 14:40 [ТС] | |
|
nmcf,
Ну я так подумал, потому что ОС контролирует работу пользовательских программ, и всегда готова что-то следать. Это наводит на мысль что работает она постоянно, пока включен компьютер... А что бы она работала по идее ей нужно выполняться как минимум на одном ядре... hoggy, Я имел ввиду что говорят, что потоки программы могут быть выполнены параллельно в том количестве, которое равно количеству ядер. Но тут возникает вопрос, чем занята ОС в такой момент? Она же должна выполняться то же, а значит занимать какое то ядро. Потому что если она хотя бы временно слезет со своего ядра, то например не сможет среагировать на какую то важную вещь, например при наступлении таймаута т.к будет спать... Или в таких случаях одно из ядер каким то образом заставляют освободить дорогу для ОС, принудительно меняя контекст? Если так, то выходит есть некая аппаратная реализация которая работает вплотную с ОС и помогает ей в этих делах? Вот это не понятно...
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 18.06.2017, 14:49 | |
|
ОС прерывания использует, никто не получает ядра в бесконтрольное владение.
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.06.2017, 15:03 [ТС] | |
|
nmcf,
Если ОС прерывается, то как тогда она реагирует скажем на то, когда приходит время выполнить определенную задачу в определённое время, особенно если это ОС реального времени? Так же интересует кто решает, когда пробудить ОС что бы она и дальше могла управлять процессами
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 18.06.2017, 15:09 | |
|
Я же говорю: там используются аппаратные прерывания от таймера. За счёт этого всё синхронизируется, а ОС получает управление.
Есть толстая книжка Windows Internals, там (наверное) объясняют подробнее.
1
|
|
|
|
|
| 18.06.2017, 15:18 | |
Сообщение было отмечено Undisputed как решение
Решение
Процессор всегда по очереди исполняет код пользовательских задач и код операционной системы. Во времени это обычно выглядит так. Операционная система поставила пользовательскую задачу на исполнение на процессор. Через какое-то время (например 0.01 сек) приходит прерывание от аппаратного таймера, из-за чего исполнение пользовательской программы приостанавливается и управление передаётся в ОС. ОС, поразмышляв, может вернуть управление пользовательской программе и процессор будет занят программой до следующего прерывания от таймера. ОС может поставить на исполнение и другую программу и опять процессор будет исполнять программу (но уже другую) до следующего прерывания от таймера. Так реализуется многозадачность в том числе и на одноядерной системе. Т.е. процессор по очереди исполняет различные задачи а между ними вклинивается исполнение кода ОС
Если на процессоре несколько ядер, то ядро исполняется на каждом ядре. Т.е. описанный выше процесс проходит одновременно на нескольких ядрах. Естественно, что в этом случае различные пользовательские задачи могут одновременно исполняться на различных ядрах. Но ОС в моенты прерываний в любом случае исполняется на каждом из ядер. Т.е. нет такого, что операционная система монопольно сидит на каком-то ядре и раздаёт ядра для других задач
2
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 18.06.2017, 15:19 | |
|
Undisputed, Танненбаума читать, срочно
1
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 18.06.2017, 15:21 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 18.06.2017, 15:37 [ТС] | |
|
Evg,
Похоже на правду, спасибо!) Потому что монопольное владение на одноядерной системе привело бы ни к чему... Теперь понял DrOffset, Спасибо за совет)
0
|
|
| 18.06.2017, 15:37 | |
|
Помогаю со студенческими работами здесь
14
Рекомендации ОС linux Рекомендации по сборке ПК за 1к$ Рекомендации по дизайну! Рекомендации по сборке Критика и рекомендации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь 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.
На борту пять. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|