Другие языки программирования и технологии

Объясните, пожалуйста, что такое и как работает многопоточность?

Как я понял, если компьютер многоядерный, то можно направить поток в другое ядро ( или как-то так, не обессудьте).
1) Это увеличивает производительность? Если да, то кратно ли кол-во ядер?
2) Каким образом программа узнает, в какое ядро мы говорим ей топать, если их, допустим, 4? Ведь пишется просто sleep, то есть лишь приостанавливает один поток, а не задаётся направление.
1. Как ты думаешь, если над задачей работает не одно ядро, а два, это увеличивает производительность? Смотря как реализована многопоточность и с какой задачей. В целом конечно может быть кратно количеству ядер.
2. Распределением потоков занимается операционная система. При чём тут Sleep, я вообще не понял. Он лишь делает паузу в алгоритме, но ядро при этом не блокируется.
3. Многопоточность нужна не только для того, чтобы распределять между ядрами. Иногда требуется параллельность.
Андрей Зрец
Андрей Зрец
82 116
Лучший ответ
Евгений Науменко Решил с ботом пообщаться?
Не только. И на одном ядре можно реализовать. Запустить пару десятков дочерних потоков, которые будут потреблять больше процессорного времени, и в итоге программа станет работать быстрее. Полезно запускать затратный по времени алгоритм в отдельном потоке, чтобы у пользователя не "зависал" его графический интерфейс. Поэтому не надо путать параллельные вычисления с многопоточностью.
Хасан Ачилов
Хасан Ачилов
98 362
Дима Джалилов А один поток не может потреблять всё процессорное время? Зачем запускать десяток?
нет . вы если частник у вас денег не хватит просто..
Многопоточность - это не магия, которая линейно ускоряет работу программы, а ручное распределение большой задачи на список мелких, которые выполняются отдельными потоками, на уровне кода программы. За распределение потоков-"рабочих" между виртуальными ядрами отвечает ОС. Почти все исполнения многопоточности не идеальны и их нельзя бесконечно расширять, пока прирост производительности не превысит оверхед лишних вычислений.

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