Многопоточность означает именно это, запуск нескольких потоков.Это может быть сделано в однопроцессорной системе или в многопроцессорной системе.
В однопроцессорной системе при запуске нескольких потоков фактическое наблюдение за компьютером, выполняющим несколько операций одновременно(то есть многозадачность) - иллюзия, потому что в действительности происходит то, что под капотом есть программный планировщик, выполняющий квантование времени на одном процессоре.Таким образом, в любой момент времени выполняется только одна задача, но планировщик переключается между задачами достаточно быстро, чтобы вы никогда не заметили, что существует несколько процессов, потоков и т. Д., Конкурирующих за один и тот же ресурс ЦП.
В многопроцессорной системе потребность во временном разрезании снижается.Эффект сокращения времени все еще присутствует, потому что современная ОС может иметь сотни потоков, конкурирующих за два или более процессоров, и, как правило, не существует отношения 1: 1 в количестве потоков с числом доступных процессорных ядер.Таким образом, в какой-то момент поток должен будет остановиться, а другой поток запускается на процессоре, который разделяют оба потока.Это снова обрабатывается планировщиком ОС.Тем не менее, с многопроцессорной системой, вы можете иметь две вещи, происходящие одновременно, в отличие от однопроцессорной системы.
В конце концов, две парадигмы действительно несколькоортогональный в том смысле, что вам понадобится многопоточность всякий раз, когда вы хотите, чтобы две или более задачи выполнялись асинхронно, но из-за среза времени вам не обязательно нужна многопроцессорная система для этого.Если вы пытаетесь запустить несколько потоков и выполняете задачу с высокой степенью параллельности (то есть пытаетесь решить интеграл), то да, чем больше ядер вы можете бросить в проблему, тем лучше.Вам не обязательно понадобится отношение один к одному между потоками и ядрами обработки, но в то же время вам не нужно выделять столько потоков, что вы получите тонны свободных потоков, потому что они должны ждатьзапланировано на одном из доступных процессорных ядер.С другой стороны, если для ваших параллельных задач требуется какой-то последовательный компонент, то есть поток будет ожидать результата от другого потока, прежде чем он сможет продолжить, тогда вы сможете запустить больше потоков с некоторым типом барьера или метода синхронизации, так чточто потоки, которые должны быть простаивают, не расходуются с использованием процессорного времени, а только ресурсы, которые должны работать, борются за ресурсы процессора.