Потоки обычно означают, что несколько процессов работают одновременно на одном процессоре (ну, на самом деле, вы думаете, что они этого не делают, но они очень быстро переключаются между ними).
Параллелизм - это одновременная работа нескольких процессов на нескольких процессорах.
Оба имеют свои плюсы и минусы в значительной степени в зависимости от планировщика, используемого вашей операционной системой. Обычно вычислительные затраты на создание потока намного ниже, чем порождение процесса на другом процессоре, однако наличие «целого» процессора для себя увеличивает общую скорость этого процесса. Но с другой стороны, если этот процесс должен обмениваться данными с другим процессом на другом процессоре, вам необходимо решить проблему IPC (межпроцессное взаимодействие), которая может быть настолько затратной, что фактически лучше просто использовать поток на том же процессоре. *
Большинство операционных систем знают о нескольких процессорах / ядрах и могут использовать их, но это обычно делает планировщик довольно сложным.
Если вы программируете на языке, использующем виртуальную машину (виртуальную машину), имейте в виду, что им нужно реализовать свой собственный планировщик (если вообще есть).
Например, Python использует GIL, который говорит, что все, что работает на этой виртуальной машине, всегда остается на одном и том же процессоре. Хотя некоторые ОС способны переносить тяжелый процесс на другой процессор, который в данный момент не так занят, это, конечно, означает, что весь процесс должен быть приостановлен, пока он это делает.
Некоторые операционные системы, такие как DragonFlyBSD, используют совершенно иной подход к планированию, чем тот, который на данный момент является «стандартным» подходом.
Я думаю, что этот ответ дает вам достаточно ключевых слов для поиска дополнительной информации: -)