Threading vs Parallelism, чем они отличаются?

В чем разница между потоками и параллелизмом?

Какой из них имеет преимущество перед другим?


person Dhanapal    schedule 30.04.2009    source источник
comment
Чем отличаются автомобили и вождение? Многопоточность — это использование потоков, параллелизм — это когда что-то работает параллельно. Самый распространенный способ заставить все работать параллельно — использовать потоки.   -  person jalf    schedule 30.04.2009


Ответы (9)


Дэниел Мот (мой бывший коллега) — Threading/Concurrency vs Parallelism статья все объясняет.

Цитата:

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

Быстрый тест: если на одноядерной машине вы используете потоки, и это идеально подходит для вашего сценария, то вы не используете параллелизм, вы просто используете многопоточность.

person RichardOD    schedule 30.04.2009
comment
Хорошая статья! Возможно, стоит добавить сюда краткое резюме или цитату, чтобы застраховаться от гниения ссылок. - person Chris Nolet; 11.12.2016

Многопоточность обычно относится к тому, что несколько процессов работают одновременно на одном процессоре (на самом деле вы не думаете, что они работают, но они очень быстро переключаются между ними).

Параллелизм — это когда несколько процессов работают одновременно на нескольких процессорах.

У обоих есть свои плюсы и минусы, в значительной степени зависящие от планировщика, используемого вашей операционной системой. Обычно стоимость вычислений для создания потока намного ниже, чем создание процесса на другом ЦП, однако наличие «цельного» ЦП для себя увеличивает общую скорость этого процесса. Но опять же, если этому процессу необходимо взаимодействовать с другим процессом на другом ЦП, вам необходимо решить проблему IPC (межпроцессное взаимодействие), которая может быть такой накладной, что лучше просто использовать поток на том же ЦП.

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

Если вы программируете на языке, который использует VM (виртуальную машину), имейте в виду, что им нужно реализовать собственный планировщик (если вообще). Python, например, использует GIL, который в значительной степени говорит, что все, что работает на этой виртуальной машине, всегда остается на одном и том же процессоре. Хотя некоторые ОС способны переносить тяжелый процесс на другой ЦП, который не так загружен в данный момент, что, конечно, означает, что весь процесс необходимо приостановить, пока он это делает.

Некоторые операционные системы, такие как DragonFlyBSD, используют совершенно другой подход к планированию, чем то, что в данный момент является «стандартным» подходом.

Я думаю, что этот ответ дает вам достаточно ключевых слов для поиска дополнительной информации :-)

person Martin P. Hellwig    schedule 30.04.2009

Существует два различных типа параллелизма:

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

Как видите, они решают совершенно разные задачи.

person Alexander Crescent    schedule 22.11.2019

Параллелизм — это общий метод использования более чем одного потока инструкций для выполнения вычислений. Важнейшим аспектом всех параллельных методов является взаимодействие между потоками для совместного получения окончательного ответа.

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

Одним из примеров может быть то, что один поток просто ставит в очередь запросы к диску и передает их рабочему потоку, эффективно распараллеливая диск и ЦП. Традиционный метод каналов UNIX состоит в том, чтобы разбить их на две полные программы, скажем «cat» и grep в команде:

cat /var/log/Xorg.0.log | grep "EE"

Многопоточность могла бы снизить затраты на связь при копировании дискового ввода-вывода из процесса cat в процесс grep.

person jldugger    schedule 30.04.2009

Многопоточность — это технология, параллелизм — это парадигма, которая может быть реализована с помощью многопоточности (но с тем же успехом может быть реализована с использованием отдельных потоков на нескольких процессорах).

person PaulJWilliams    schedule 30.04.2009

Вот лучший ответ, чтобы развеять чьи-либо сомнения, связанные с параллелизмом и многопоточностью.

Потоки — это программная конструкция. Я могу запустить столько pthreads, сколько захочу, даже на старом одноядерном процессоре. Таким образом, многопоточность не обязательно параллельна: она параллельна только в том случае, если аппаратное обеспечение может ее поддерживать. Поэтому, если у вас есть несколько ядер и/или гиперпоточность, ваша многопоточность становится параллельной. И в наши дни это на самом деле большую часть времени.

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

Таким образом, традиционно многопоточность является почти синонимом параллелизма. И оба они становятся параллельными только в том случае, если аппаратное обеспечение поддерживает это. Даже в этом случае вы можете запускать намного больше потоков, чем поддерживает аппаратное обеспечение, и у вас остается параллелизм.

Из ответа Виктора Эйкхаута на Quora.

person Iqra.    schedule 16.05.2017

Многопоточность — это параллелизм для бедняков.

РЕДАКТИРОВАТЬ: Чтобы быть более точным:

Threading не имеет ничего общего с параллелизмом и наоборот. Многопоточность — это создание ощущения, что некоторые процессы выполняются параллельно. Однако это не заставляет процессы завершать ВСЕ свои действия в целом быстрее.

person Thevs    schedule 30.04.2009
comment
(-1) A. У каждого инструмента есть свое место. Б. У вас есть чем это подтвердить? - person DevinB; 30.04.2009
comment
Я просто ответил на вопрос темы. Какой вопрос - такой и ответ. - person Thevs; 30.04.2009
comment
Для тех, кто хочет расширенного обсуждения, давайте начнем с prodata.lt/EN/Programming/OPU_computing_model. pdf. - person Thevs; 30.04.2009
comment
Я убрал свой минус, потому что вы уточнили свой ответ. - person DevinB; 30.04.2009
comment
Тем не менее, многопоточность на самом деле ускоряет ваше выполнение в зависимости от вашего приложения. Несколько примеров: программа загрузки, которая загружает несколько файлов одновременно, если я использую многопоточное приложение, оно будет загружать все файлы быстрее, но отдельные файлы медленнее. Приложение, которое выполняет постоянные вычисления и время от времени принимает пользовательский ввод. Если вы поместите это в один поток, ваши фоновые вычисления остановятся (поскольку они на самом деле не в фоновом режиме, если они находятся в одном потоке). Но я согласен, что параллелизм и многопоточность — это не одно и то же. - person DevinB; 30.04.2009
comment
Иногда короткие ответы без пояснений получают больше всего голосов :) Эффект Stackoverflow? - person Thevs; 30.04.2009

Как вы определяете «параллелизм»? Многопоточность — это конкретная реализация концепции параллельного выполнения программы.

Статья, на которую ссылается RichardOD, по-видимому, в основном касается того, действительно ли потоки выполняются параллельно на конкретной машине.

Однако ваш вопрос, кажется, рассматривает многопоточность и параллелизм как противоположности. Возможно, вы имеете в виду программы, которые используют несколько процессов, а не несколько потоков? Если да, то отличия:

  • Создавать потоки намного дешевле, чем процессы. Вот почему использование потоков, а не процессов привело к огромному ускорению веб-приложений — это было названо «FastCGI».
  • Несколько потоков на одном компьютере имеют доступ к общей памяти. Это значительно упрощает взаимодействие между потоками, но также и очень опасно (легко создавать такие ошибки, как условия гонки, которые очень трудно диагностировать и исправить).
person Michael Borgwardt    schedule 30.04.2009

Если мы думаем о ЦП как о компании, а о потоках как о его работниках, то это поможет нам легче понять многопоточность и параллелизм.

Подобно тому, как в компании много рабочих, у процессора также много потоков.

Также может быть более одной компании и, следовательно, может быть более одного процессора.

Поэтому, когда рабочие (потоки) работают в компании (CPU), это называется threading.

И когда две или более компаний (CPU) работают независимо или вместе, это называется параллелизм.

person Sonu    schedule 09.09.2018