@anemic_prince

Процессы работают на различных ядрах процессора или нет?

В данный момент изучаю Message Passing Interface и у меня, допустим, есть программа, которая выполняется на двух процессах. Будет ли она корректно и максимально быстро работать на моём одном двухядерном процессоре? Либо для максимальной быстрой и корректной работы мне нужно два процессора, а количество ядер не имеет значения для программ, в которых много процессов? Объясните пожалуйста доступным языком или подскажите где можно об этом почитать.
  • Вопрос задан
  • 1230 просмотров
Пригласить эксперта
Ответы на вопрос 6
@pfg21
ex-турист
да.
с точки зрения программы "железных" процессоров нет.
есть цифра максимального количества одновременно исполняемых потоков.
даже если программа наштампует исполняемых потоков больше максимального числа, то операционная система просто нашинкует ресурсы потоков исполнения между всеми запрашивающими.
т.е. многопотоковая программа будет исполнятся и на однопотоковом процессоре.
Ответ написан
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
Вы начнете с этим сталкиваться, когда дело дойдет до больших (реально больших) серверов с большим количеством сокетов и NUMA.

Там вам придется учитывать разные факторы - что процессы желательно жестко запинить на ядра, чтобы они не скакали между регионами, что память, подключенная физически к одному процессору вам конечно доступна с другого процессора, но ценой транзакций по QPI и еще какой шине.

Короче, пока у вас для экспериментов писюк/ноутбук, для вас все будет одинаково, не задумывайтесь об этом.
Ответ написан
Комментировать
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
грубо говоря
два одноядерных процессора = два ядра под одной крышкой(не считая кеш = он общий
короче = не парься))) фсё будет ОК
Ответ написан
Комментировать
solotony
@solotony
покоряю пик Балмера
с точки зрения программ нет никакой разницы между "двухядерным процессором" и "двумя процессорами".

а на счет быстродействия надо говорить о конкретных системах и задачах.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
Многозадачностью занимается операционная система. С точки зрения самой программы, она об этом ничего не знает, и сама программа может пользоваться только средствами языка (создавать треды), но будут эти треды обработаны одним ядром, одним процессором или разными - программа ничего не знает.

ОС рулит тем, какой процесс и какой тред где будет выполняться. Для максимально быстрой работы нужно понимать, что создавать бОльше тредов, чем есть ядер - не будет иметь особого смысла для ускорения расчетов.
Ответ написан
Комментировать
@Zanak
Для ОС почти нет принципиальной разницы между процессом и потоком. При создании процесса происходит выделение нового куска памяти, при создании потока - это не обязательно происходит, поток имеет доступ к памяти родителя, процесс нет. Тоесть, в контексте вопроса можно ограничится разговором о потоках.
Потоков может быть столько, сколько позволяет память, даже на однопроцессорной и одноядерной железке.
Активность потоков может управляться на нескольких уровнях. Во первых, ОС может в любой момент тормазнуть исполнение потока. Даже если этому и можно помешать, врядли это легко, да и врядли нужно это делать. Среды исполнения, иногда, позволяют указать, сколько потоков запустить для исполнения программы. Например среда исполнения erlang или go позволяет программам создавать не дорогие потоки ОС, на создание которых уходит масса времени, а более легкие, жизненным циклом которых сама среда и управляет. Происходит отображение N потоков программы на M потоков ОС, которые запрашиваются один раз, при старте.
Поток может находится в одном из состояний: спит - когда планировщик его остановил, активен - когда поток получил управление, заблокирован - когда поток ждет какое - то событие или окончание какого - то действия, например прихода данных по сети, ошибка - когда происходит обработка ошибки или освобождение ресурсов и смерть потока.
Вопрос оптимальности создания более одного потока/процесса всегда следует рассматривать в контексте конкретной задачи. Даже при неблокирующем обмене данными между потоками, как минимум, переключение потоков, если речь не идет о количестве потоков меньше или равном количеству присутствующих ядер, имеет свою цену по времени. Подозреваю, многопоточная программа начинает выигрывать у однопоточной, когда количество потоков, которым надо исполнятся паралельно не превосходит количество доступных ядер. Как только потоков становится больше, в дело приходится вступать планировщику, и естественно, он работает не мгновенно.
Вопрос оптимальности архитектуры тоже, на мой взгляд, не имеет общего ответа. Для вычислительных задач может оказаться сравнимо, использовать один двухядерный процессор, или материнку с поддержкой 2 процессоров, а, например, для запуска веб сервера и БД к нему вообще лучшим вариантом может оказаться два независимых компютера.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы