Подтвердить что ты не робот

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

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

У кого есть преимущество над другим?

4b9b3361

Ответ 1

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

Цитируется:

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

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

Ответ 2

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

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

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

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

Threading может существенно снизить затраты на связь для копирования дискового ввода-вывода из процесса cat в процесс grep.

Ответ 3

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

Parallelism имеет несколько процессов, работающих одновременно на нескольких процессорах.

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

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

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

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

  • Потоки гораздо дешевле создавать, чем процессы. Вот почему использование потоков, а не процессов привело к огромному ускорению в веб-приложениях - это называлось FastCGI.
  • Несколько потоков на одном компьютере имеют доступ к общей памяти. Это значительно облегчает общение между потоками, но также очень опасно (легко создавать ошибки, такие как условия гонки, которые очень трудно диагностировать и исправлять).

Ответ 7

Threading - плохой человек parallelism.

EDIT: точнее:

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

Ответ 8

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

Как у компании много работников, так и у процессора много потоков.

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

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

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