Was ist der Unterschied zwischen Parallelität und Parallelität?


1075

Was ist der Unterschied zwischen Parallelität und Parallelität?

Beispiele werden geschätzt.


41
kurze Antwort: Parallelität besteht aus zwei Zeilen von Kunden, die an einem einzigen Kassierer bestellen (Zeilen bestellen abwechselnd); Parallelität besteht aus zwei Kundenreihen, die bei zwei Kassierern bestellen (jede Zeile erhält einen eigenen Kassierer).
Chharvey

@chharvey: Ich denke wirklich, das sollte die Antwort sein. Kurz (zwei Textzeilen, wenn Sie "kurze Antwort" weglassen), auf den Punkt gebracht, sofort verständlich. Schön gemacht!
Mike Maxwell

Antworten:


1269

Parallelität ist, wenn zwei oder mehr Aufgaben in überlappenden Zeiträumen gestartet, ausgeführt und abgeschlossen werden können. Das bedeutet nicht unbedingt, dass beide jemals im selben Moment laufen werden. Zum Beispiel Multitasking auf einer Single-Core-Maschine.

Parallelität ist, wenn Aufgaben buchstäblich gleichzeitig ausgeführt werden, z. B. auf einem Multicore-Prozessor.


Zitieren des Multithread-Programmierhandbuchs von Sun :

  • Parallelität: Eine Bedingung, die vorliegt, wenn mindestens zwei Threads Fortschritte machen. Eine allgemeinere Form der Parallelität, die Time-Slicing als Form der virtuellen Parallelität umfassen kann.

  • Parallelität: Eine Bedingung, die auftritt, wenn mindestens zwei Threads gleichzeitig ausgeführt werden.


169
Ich mag diese Antwort, aber ich würde vielleicht noch weiter gehen und die Parallelität als eine Eigenschaft eines Programms oder Systems charakterisieren (und Parallelität als das Laufzeitverhalten, wenn mehrere Aufgaben gleichzeitig ausgeführt werden).
Adrian Mouat

24
Ich mag Adrian Mouats Kommentar sehr. Siehe auch diese ausgezeichnete Erklärung: haskell.org/haskellwiki/Parallelism_vs._Concurrency
jberryman

9
@Raj: Richtig, Parallelität (im Sinne von Multithreading) ist mit Single-Core-Prozessoren nicht möglich.
RichieHindle

5
Wenn Sequential und Parallel beide Werte in einer Aufzählung wären, wie würde diese Aufzählung heißen?
Toddmo

11
Zu diesem Zweck kann das Zitat von Sun wie folgt umformuliert werden: - Parallelität: Eine Bedingung, die vorliegt, wenn während eines bestimmten Zeitraums zwei Threads Fortschritte machen. - Parallelität: Eine Bedingung, die auftritt, wenn zu einem bestimmten Zeitpunkt zwei Threads ausgeführt werden werden gleichzeitig ausgeführt
Phillip

494

Warum die Verwirrung besteht

Verwirrung besteht, weil die Wörterbuchbedeutungen dieser beiden Wörter fast gleich sind:

  • Gleichzeitig : vorhanden, geschehen oder gleichzeitig ausgeführt (dictionary.com)
  • Parallel : sehr ähnlich und oft gleichzeitig (Merriam Webster).

Die Art und Weise, wie sie in der Informatik und Programmierung verwendet werden, ist jedoch sehr unterschiedlich. Hier ist meine Interpretation:

  • Parallelität : Unterbrechbarkeit
  • Parallelität : Unabhängigkeit

Was meine ich mit den obigen Definitionen?

Ich werde mit einer realen Analogie klären. Angenommen, Sie müssen zwei sehr wichtige Aufgaben an einem Tag erledigen:

  1. Holen Sie sich einen Reisepass
  2. Machen Sie eine Präsentation fertig

Das Problem ist nun, dass Sie bei Aufgabe 1 zu einem äußerst bürokratischen Regierungsbüro gehen müssen, bei dem Sie vier Stunden hintereinander warten müssen, um Ihren Reisepass zu erhalten. In der Zwischenzeit wird Aufgabe 2 von Ihrem Büro benötigt und ist eine wichtige Aufgabe. Beide müssen an einem bestimmten Tag beendet sein.

Fall 1: Sequentielle Ausführung

Normalerweise fahren Sie 2 Stunden zum Passbüro, warten 4 Stunden in der Schlange, erledigen die Aufgabe, fahren zwei Stunden zurück, gehen nach Hause, bleiben 5 weitere Stunden wach und erledigen die Präsentation.

Fall 2: Gleichzeitige Ausführung

Aber du bist schlau. Sie planen voraus. Sie haben einen Laptop dabei und während Sie in der Schlange warten, beginnen Sie mit der Arbeit an Ihrer Präsentation. Auf diese Weise müssen Sie nach Ihrer Rückkehr zu Hause nur noch 1 statt 5 Stunden arbeiten.

In diesem Fall erledigen Sie beide Aufgaben nur in Teilen. Sie haben die Passaufgabe unterbrochen, während Sie in der Schlange gewartet haben, und an der Präsentation gearbeitet. Als Ihre Nummer angerufen wurde, haben Sie die Präsentationsaufgabe unterbrochen und zur Passaufgabe gewechselt. Die Zeitersparnis war im Wesentlichen aufgrund der Unterbrechbarkeit beider Aufgaben möglich.

Parallelität, IMO, kann als "Isolation" -Eigenschaft in ACID verstanden werden . Zwei Datenbanktransaktionen gelten als isoliert, wenn Untertransaktionen auf verschachtelte Weise ausgeführt werden können und das Endergebnis dasselbe ist, als ob die beiden Aufgaben nacheinander ausgeführt würden. Denken Sie daran, dass Sie sowohl für die Pass- als auch für die Präsentationsaufgaben der alleinige Henker sind .

Fall 3: Parallele Ausführung

Jetzt, da Sie so ein kluger Kerl sind, sind Sie offensichtlich ein Höherer, und Sie haben einen Assistenten. Bevor Sie die Passaufgabe starten, rufen Sie ihn an und fordern ihn auf, den ersten Entwurf der Präsentation vorzubereiten. Sie verbringen Ihren ganzen Tag damit, die Passaufgabe zu erledigen, kommen zurück und sehen sich Ihre Mails an, und Sie finden den Präsentationsentwurf. Er hat einen ziemlich soliden Job gemacht und mit einigen Änderungen in 2 weiteren Stunden schließen Sie ihn ab.

Da Ihr Assistent jetzt genauso schlau ist wie Sie, konnte er selbständig daran arbeiten , ohne Sie ständig um Klarstellungen bitten zu müssen. Aufgrund der Unabhängigkeit der Aufgaben wurden sie gleichzeitig von zwei verschiedenen Henkern ausgeführt .

Immer noch bei mir? In Ordung...

Fall 4: Gleichzeitig, aber nicht parallel

Erinnern Sie sich an Ihre Passaufgabe, bei der Sie in der Schlange warten müssen? Da es sich um Ihren Reisepass handelt, kann Ihr Assistent nicht in der Schlange auf Sie warten. Somit ist die Passaufgabe unterbrechbar (Sie können sie stoppen, während Sie in der Leitung warten, und sie später fortsetzen, wenn Ihre Nummer angerufen wird), aber nicht unabhängig (Ihr Assistent kann nicht an Ihrer Stelle warten).

Fall 5: Parallel, aber nicht gleichzeitig

Angenommen, das Regierungsbüro verfügt über eine Sicherheitskontrolle, um die Räumlichkeiten zu betreten. Hier müssen Sie alle elektronischen Geräte entfernen und den Beamten vorlegen. Diese geben Ihre Geräte erst zurück, nachdem Sie Ihre Aufgabe erledigt haben.

In diesem Fall ist die Passaufgabe weder unabhängig noch unterbrechbar . Selbst wenn Sie in der Schlange stehen, können Sie nicht an etwas anderem arbeiten, da Sie nicht über die erforderliche Ausrüstung verfügen.

Angenommen, die Präsentation ist so mathematisch, dass Sie mindestens 5 Stunden lang eine 100% ige Konzentration benötigen. Sie können dies nicht tun, während Sie in der Schlange auf die Passaufgabe warten, selbst wenn Sie Ihren Laptop dabei haben.

In diesem Fall ist die Präsentationsaufgabe unabhängig (entweder Sie oder Ihr Assistent können 5 Stunden gezielte Anstrengungen unternehmen), jedoch nicht unterbrechbar .

Fall 6: Gleichzeitige und parallele Ausführung

Angenommen, Sie weisen Ihren Assistenten nicht nur der Präsentation zu, sondern tragen auch einen Laptop für die Passaufgabe mit sich. Während Sie in der Schlange warten, sehen Sie, dass Ihr Assistent die ersten 10 Folien in einem gemeinsam genutzten Deck erstellt hat. Sie senden Kommentare zu seiner Arbeit mit einigen Korrekturen. Wenn Sie später zu Hause ankommen, benötigen Sie statt 2 Stunden für die Fertigstellung des Entwurfs nur 15 Minuten.

Dies war möglich, weil die Präsentationsaufgabe unabhängig (jeder von Ihnen kann dies tun) und unterbrechbar (Sie können sie stoppen und später fortsetzen) ist. Sie haben also beide Aufgaben gleichzeitig ausgeführt und die Präsentationsaufgabe parallel ausgeführt.

Nehmen wir an, das Regierungsbüro ist nicht nur übermäßig bürokratisch, sondern auch korrupt. Auf diese Weise können Sie Ihren Ausweis vorzeigen, ihn eingeben, in der Schlange warten, bis Ihre Nummer angerufen wird, einen Wachmann und eine andere Person bestechen, um Ihre Position in der Schlange zu halten, sich herausschleichen, zurückkommen, bevor Ihre Nummer angerufen wird, und das Warten fortsetzen du selber.

In diesem Fall können Sie sowohl die Pass- als auch die Präsentationsaufgaben gleichzeitig und parallel ausführen. Sie können sich herausschleichen und Ihre Position wird von Ihrem Assistenten gehalten. Sie können dann beide an der Präsentation usw. arbeiten.


Zurück zur Informatik

In der Computerwelt sind hier Beispielszenarien aufgeführt, die für jeden dieser Fälle typisch sind:

  • Fall 1: Verarbeitung unterbrechen.
  • Fall 2: Wenn nur ein Prozessor vorhanden ist, aber alle ausgeführten Aufgaben aufgrund von E / A Wartezeiten haben.
  • Fall 3: Wird häufig gesehen, wenn es sich um Kartenreduzierungs- oder Hadoop-Cluster handelt.
  • Fall 4: Ich denke, Fall 4 ist selten. Es ist ungewöhnlich, dass eine Aufgabe gleichzeitig, aber nicht parallel ausgeführt wird. Aber es könnte passieren. Angenommen, Ihre Aufgabe erfordert den Zugriff auf einen speziellen Rechenchip, auf den nur über Prozessor 1 zugegriffen werden kann. Selbst wenn Prozessor 2 frei ist und Prozessor 1 eine andere Aufgabe ausführt, kann die spezielle Berechnungsaufgabe auf Prozessor 2 nicht fortgesetzt werden.
  • Fall 5: ebenfalls selten, aber nicht ganz so selten wie Fall 4. Ein nicht gleichzeitiger Code kann ein kritischer Bereich sein, der durch Mutexe geschützt ist. Sobald es gestartet ist, muss es vollständig ausgeführt werden. Auf zwei verschiedenen Prozessoren können jedoch zwei verschiedene kritische Bereiche gleichzeitig fortschreiten.
  • Fall 6: IMO, die meisten Diskussionen über parallele oder gleichzeitige Programmierung beziehen sich im Wesentlichen auf Fall 6. Dies ist eine Mischung aus paralleler und gleichzeitiger Ausführung.

Parallelität und Los

Wenn Sie sehen, warum Rob Pike sagt, dass Parallelität besser ist, müssen Sie verstehen, dass der Grund dafür ist. Sie haben eine sehr lange Aufgabe, in der es mehrere Wartezeiten gibt, in denen Sie auf einige externe Vorgänge wie das Lesen von Dateien und das Herunterladen von Netzwerken warten. In seinem Vortrag sagt er nur: "Brechen Sie einfach diese lange sequentielle Aufgabe ab, damit Sie etwas Nützliches tun können, während Sie warten." Deshalb spricht er mit verschiedenen Gophern über verschiedene Organisationen.

Jetzt liegt die Stärke von Go darin, dieses Brechen wirklich einfach zu machen go Keywords und Kanälen . Außerdem gibt es in der Laufzeit eine hervorragende Unterstützung für die Planung dieser Goroutinen.

Aber ist Parallelität im Wesentlichen besser als Parallelität?

Sind Äpfel besser als Orangen?


Vielen Dank für Fall 5. Ich denke oft, dass parallel implizit Parallelität bedeutet.
Hqt

2
Die Ereignisschleife von Node.js ist ein gutes Beispiel für Fall 4. Obwohl Prozessor B über freie Ressourcen verfügt, sollte die Anforderung X von Prozessor A verarbeitet werden, der gerade mit der Verarbeitung von Y beschäftigt ist. Wenn setTimeout für Y aufgerufen wird, kann X verarbeitet werden. Nach dem Timeout wird auch Y nicht mehr verarbeitet.
Lucas Janon

Es ist erwähnenswert, dass die beiden Definitionen eines Wortes "Parallelität", die in die akzeptierte Antwort aufgenommen wurden, sehr unterschiedlich sind . Der erste bezieht sich auf die Konzeption, mehrere Aufgaben in überlappenden Zeiträumen auszuführen (dh Parallelität bedeutet standardmäßig Parallelität), der zweite bezieht sich auf die Konzeption, eine Aufgabe zu unterbrechen, um eine andere auszuführen.
Mergasov

Ähnlich wie im obigen Kommentar - Multithread-Python ist ein Beispiel für Fall 4. Ich denke nicht, dass dieser Fall ungewöhnlich ist. Jede globale Interpretersperre führt zu Fall 4 (sofern überhaupt Parallelität möglich ist).
chub500

245

Ich mag Rob Pikes Vortrag: Parallelität ist keine Parallelität (es ist besser!) (Folien) (Vortrag)

Rob spricht normalerweise über Go und spricht die Frage von Parallelität und Parallelität in einer visuellen und intuitiven Erklärung an! Hier ist eine kurze Zusammenfassung:

Aufgabe: Lassen Sie uns einen Stapel veralteter Sprachhandbücher verbrennen! Eins nach dem anderen!

Aufgabe

Parallelität: Es gibt viele gleichzeitige Zerlegungen der Aufgabe! Ein Beispiel:

Gophers

Parallelität: Die vorherige Konfiguration erfolgt parallel, wenn mindestens 2 Gophers gleichzeitig arbeiten oder nicht.



15
Tut mir leid, ich musste es für das "es ist besser" -Bit ablehnen. Die richtige Antwort ist, dass es anders ist. Parallelität ist ein Teil des Problems. Parallelität ist ein Teil der Lösung.
Pyon

@ EduardoLeón Du hast den Namen des Vortrags offensichtlich nicht überprüft. Parallelität ist kein Problem, sondern nur eine Möglichkeit, über ein Problem / eine Aufgabe nachzudenken.
Asfer

5
@asfer Parallelität ist ein Teil der Struktur des Problems. Übrigens, verbinden Sie "Parallelität" (das Problem) nicht mit "Parallelitätskontrolle" (eine Lösung, die häufig zusammen mit Parallelität verwendet wird).
Pyon

1
Ich habe es gesehen und ehrlich gesagt hat es mir nicht gefallen. Es fügt unnötige Komplikationen und Nerdyness zu etwas hinzu, das auf viel einfachere Weise erklärt werden sollte (siehe die Antwort der Jongleure hier).
jj_

146

Um das hinzuzufügen, was andere gesagt haben:

Parallelität ist wie wenn ein Jongleur viele Bälle jongliert. Unabhängig davon, wie es scheint, fängt / wirft der Jongleur jeweils nur einen Ball pro Hand. Parallelität bedeutet, dass mehrere Jongleure gleichzeitig mit Bällen jonglieren.


2
Ich werde wählerisch sein, aber wenn Sie mit einem Paar Bällen jonglieren, können Sie zwei Bälle gleichzeitig haben (je nachdem, wie Sie jonglieren).
Thebugfinder

52
@thebugfinder, Um sicherzustellen, dass in Thomas 'Beispiel kein Fehler mehr vorhanden ist. Parallelität ist wie eine Person, die mit nur einer Hand jongliert. Unabhängig davon, wie es scheint, hält die Person höchstens einen Ball gleichzeitig. Parallelität ist, wenn der Jongleur beide Hände benutzt.
Bigtunacan

Was ich eigentlich mit "Paar Anzahl der Bälle" sagen wollte, war "gerade Anzahl der Bälle"
thebugfinder

1
Sehr kluge Antwort. Ich kann den Punkt des Bugfinders definitiv erkennen, aber ich mag diese Antwort sehr, wenn jeweils eine Aktion berücksichtigt und vereinbart wird.
BK

2
Ich denke, es ist besser mit "Parallelität hat eine Person für jeden Ball". Wenn die Anzahl der Bälle zunimmt (stellen Sie sich Webanfragen vor), können diese Personen mit dem Jonglieren beginnen, wodurch die Ausführung gleichzeitig und parallel erfolgt. Ich würde es auch lieben, wenn jemand das Reaktormuster mit dem Beispiel eines Jongleurs erklären könnte.
jj_

120

Angenommen, Sie haben ein Programm mit zwei Threads. Das Programm kann auf zwei Arten ausgeführt werden:

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

In beiden Fällen besteht die Parallelität aus der Tatsache, dass mehr als ein Thread ausgeführt wird.

Wenn wir dieses Programm auf einem Computer mit einem einzelnen CPU-Kern ausführen würden, würde das Betriebssystem zwischen den beiden Threads wechseln, sodass jeweils ein Thread ausgeführt werden kann.

Wenn wir dieses Programm auf einem Computer mit einer Multi-Core-CPU ausführen würden, könnten wir die beiden Threads parallel ausführen - genau zur gleichen Zeit nebeneinander.


4
Ich mochte die Gewindeblöcke. Einfach und doch perfekt! Vielen Dank für diese erstaunliche Antwort.
Bozzmob

53

Parallelität: Wenn zwei oder mehr Probleme von einem einzelnen Prozessor gelöst werden. Alt-Text

Parallelität: Wenn ein Problem von mehreren Prozessoren gelöst wird.

Alt-Text


55
Ich würde dem nicht zustimmen - ein Programm, das so konzipiert ist, dass es gleichzeitig ausgeführt wird, kann parallel ausgeführt werden oder nicht. Parallelität ist eher ein Attribut eines Programms. Bei der Ausführung kann Parallelität auftreten.
Adrian Mouat

36

Ich werde versuchen, mit einem interessanten und leicht verständlichen Beispiel zu erklären. :) :)

Angenommen , eine Organisation organisiert ein Schachturnier, bei dem 10 Spieler ( mit gleichen Schachspielfähigkeiten ) einen professionellen Champion herausfordern Schachchampion . Und da Schach ein 1: 1-Spiel ist, müssen die Organisatoren 10 Spiele zeiteffizient durchführen, damit sie das gesamte Event so schnell wie möglich beenden können.

Hoffentlich beschreiben die folgenden Szenarien leicht mehrere Möglichkeiten, diese 10 Spiele durchzuführen:

1) SERIAL - Nehmen wir an, der Profi spielt mit jeder Person einzeln, dh er startet und beendet das Spiel mit einer Person und startet dann das nächste Spiel mit der nächsten Person und so weiter. Mit anderen Worten, sie beschlossen, die Spiele nacheinander durchzuführen. Wenn ein Spiel 10 Minuten dauert, dauern 10 Spiele 100 Minuten. Nehmen Sie außerdem an, dass der Übergang von einem Spiel zum anderen 6 Sekunden dauert. Bei 10 Spielen sind es 54 Sekunden (ca. 1 Minute).

Die gesamte Veranstaltung wird also ungefähr in 101 Minuten abgeschlossen sein ( SCHLECHTESTER ANSATZ )

2) KONKURRENT - wir an, der Profi spielt seinen Zug und wechselt zum nächsten Spieler, sodass alle 10 Spieler gleichzeitig spielen, der Profispieler jedoch nicht mit jeweils zwei Personen zusammen ist. Er spielt seinen Zug und wechselt zur nächsten Person. Angenommen, der Profispieler benötigt 6 Sekunden, um an der Reihe zu sein, und die Übergangszeit des Profispielers zwischen zwei Spielern beträgt 6 Sekunden. Die Gesamtübergangszeit für die Rückkehr zum ersten Spieler beträgt 1 Minute (10 x 6 Sekunden). Daher sind 2 Minuten vergangen, bis er wieder zu der ersten Person zurückgekehrt ist, mit der das Ereignis gestartet wurde (10xtime_per_turn_by_champion + 10xtransition_time = 2min).

Angenommen, alle Spieler brauchen 45 Sekunden, um ihren Zug zu beenden. Basierend auf 10 Minuten pro Spiel ab dem SERIAL-Event ist die Nr. Die Anzahl der Runden vor dem Ende eines Spiels sollte 600 / (45 + 6) = 11 Runden (ungefähr) betragen.

Das gesamte Ereignis wird also ungefähr in 11xtime_per_turn_by_player _ & _ champ + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20,35 Minuten (ungefähr) abgeschlossen sein.

SEHEN SIE DIE VERBESSERUNG von 101 Minuten auf 20,35 Minuten ( BESSERER ANSATZ )

3) PARALLEL - Nehmen wir an, die Organisatoren erhalten zusätzliche Mittel und haben sich daher entschlossen, zwei professionelle Champion-Spieler (beide gleich fähig) einzuladen. Sie haben die Gruppe der gleichen 10 Spieler (Herausforderer) in zwei Gruppen zu je 5 aufgeteilt und sie zwei Champions zugewiesen, dh einem jeweils gruppieren. Jetzt läuft das Event in diesen beiden Sätzen parallel ab, dh mindestens zwei Spieler (einer in jeder Gruppe) spielen gegen die beiden Profispieler in ihrer jeweiligen Gruppe.

Innerhalb der Gruppe nimmt der Profispieler jedoch jeweils einen Spieler (dh nacheinander), sodass Sie ohne Berechnung leicht ableiten können, dass das gesamte Ereignis ungefähr in 101/2 = 50,5 Minuten abgeschlossen sein wird

SEHEN SIE DIE VERBESSERUNG von 101 Minuten auf 50,5 Minuten ( GUTER ANSATZ )

4) CONCURRENT + PARALLEL - Nehmen wir im obigen Szenario an, dass die beiden Champion-Spieler gleichzeitig mit den 5 Spielern in ihren jeweiligen Gruppen spielen (2. Punkt lesen), sodass jetzt gruppenübergreifende Spiele parallel laufen, aber innerhalb der Gruppe gleichzeitig laufen.

Die Spiele in einer Gruppe werden also ungefähr in 11xtime_per_turn_by_player _ & _ champ + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sec = 15,5 Minuten (ungefähr) abgeschlossen sein.

Die gesamte Veranstaltung (an der zwei solcher parallel laufenden Gruppen beteiligt sind) wird also ungefähr in 15,5 Minuten abgeschlossen sein

SEHEN SIE DIE VERBESSERUNG von 101 Minuten auf 15,5 Minuten ( BEST APPROACH )

HINWEIS: Wenn Sie im obigen Szenario 10 Spieler durch 10 ähnliche Jobs und zwei professionelle Spieler durch zwei CPU-Kerne ersetzen, bleibt die folgende Reihenfolge wieder wahr:

SERIAL> PARALLEL> CONCURRENT> CONCURRENT + PARALLEL

(HINWEIS: Diese Reihenfolge kann sich für andere Szenarien ändern, da diese Reihenfolge stark von der gegenseitigen Abhängigkeit der Jobs, den Kommunikationsanforderungen für s / w-Jobs und den s / w-Jobs für den Übergangsaufwand abhängt.)


2
Tolle Erklärung. Es gibt eine Ergänzung. Das gleichzeitige Modell für den 2. Fall (wenn ein professioneller Spieler s / w-Spieler bewegt) wird nur dann verbessert, wenn der Spieler in 45 Sekunden an der Reihe ist. Mit anderen Worten, wir sollten während des gesamten Prozesses E / A warten lassen. Wenn ein normaler Spieler in weniger als 45 Sekunden (5 oder 10 Sekunden) drehen kann, ist die Verbesserung geringer. Wenn wir also keine E / A-Wartezeit in unserer Arbeit haben, entspricht die Parallelität in etwa einer seriellen Ausführung.
Psylone

33

Einfaches Beispiel:

Gleichzeitig lautet: "Zwei Warteschlangen greifen auf einen Geldautomaten zu"

Parallel ist: "Zwei Warteschlangen und zwei Geldautomaten"


Und Multithreading? Ich denke nur daran, wie der Begriff Multithreading in das obige Szenario passt. Ist in diesem Fall das Concurrent == Multithreading, wie in einem von jeder Warteschlange, jeden Moment Geldautomaten?
KhoPhi

31

Stellen Sie sich vor, Sie lernen eine neue Programmiersprache, indem Sie sich ein Video-Tutorial ansehen. Sie müssen das Video anhalten, das im Code Gesagte anwenden und dann weiter ansehen. Das ist Parallelität.

Jetzt sind Sie ein professioneller Programmierer. Und Sie hören gerne ruhige Musik, während Sie programmieren. Das ist Parallelität.

Wie Andrew Gerrand im GoLang Blog sagte

Bei der Parallelität geht es darum, viele Dinge gleichzeitig zu erledigen. Bei Parallelität geht es darum, viele Dinge gleichzeitig zu tun.

Genießen.


29

Sie lösen verschiedene Probleme. Parallelität löst das Problem knapper CPU-Ressourcen und vieler Aufgaben. Sie erstellen also Threads oder unabhängige Ausführungspfade durch Code, um die Zeit auf der knappen Ressource zu teilen. Bis vor kurzem hat die Parallelität aufgrund der CPU-Verfügbarkeit die Diskussion dominiert.

Parallelität löst das Problem, genügend Aufgaben und geeignete Aufgaben (die korrekt aufgeteilt werden können) zu finden und auf zahlreiche CPU-Ressourcen zu verteilen. Parallelität gab es natürlich schon immer, aber sie tritt in den Vordergrund, weil Multi-Core-Prozessoren so billig sind.


28

Concurency: Mehrere Ausführungsabläufe mit dem Potenzial, Ressourcen gemeinsam zu nutzen

Beispiel: Zwei Threads konkurrieren um einen E / A-Port.

Paralelismus: Aufteilen eines Problems in mehrere ähnliche Teile.

Beispiel: Analysieren einer großen Datei durch Ausführen von zwei Prozessen für jede Hälfte der Datei.


21

Es gibt zwei Arten der gleichzeitigen Programmierausführung: nicht parallele gleichzeitige Programmierung und parallele gleichzeitige Programmierung (auch als Parallelität bezeichnet).

Der Hauptunterschied besteht darin, dass für das menschliche Auge Threads in nicht paralleler Parallelität zur gleichen Zeit ausgeführt werden, in Wirklichkeit jedoch nicht. Bei nicht parallelen Parallelitätsthreads wechseln sie schnell und wechseln sich ab, um den Prozessor durch Time-Slicing zu verwenden. Parallel dazu stehen mehrere Prozessoren zur Verfügung, sodass mehrere Threads gleichzeitig auf verschiedenen Prozessoren ausgeführt werden können. Geben Sie hier die Bildbeschreibung ein

Referenz: Einführung in die Parallelität in Programmiersprachen


8
ein Bild mit mehr als tausend Worten
Senseiwu

21

Parallelität ist die gleichzeitige Ausführung von Prozessen auf einem multiple cores per CPUoder multiple CPUs (on a single motherboard).

Parallelität ist, wenn Parallelität auf einem single core/CPUdurch die Verwendung von Planungsalgorithmen erreicht wird , die die Zeit der CPU (Zeitscheibe) teilen. Prozesse sind verschachtelt .

Einheiten:

  • 1 oder viele Kerne in einer einzelnen CPU (so ziemlich alle modernen Prozessoren)
  • 1 oder viele CPUs auf einem Motherboard (denken Sie an Server der alten Schule)
  • 1 Anwendung ist 1 Programm (denken Sie an den Chrome-Browser)
  • 1 Programm kann 1 oder mehrere Prozesse haben (denken Sie, dass jeder Chrome-Browser-Tab ein Prozess ist)
  • 1 Prozess kann 1 oder mehrere Threads aus einem Programm enthalten (Chrome-Tab, der Youtube-Videos in einem Thread abspielt, ein anderer Thread wird für den Kommentarbereich erstellt, ein anderer für Benutzeranmeldeinformationen)
  • Somit kann 1 Programm 1 oder mehrere Ausführungsthreads haben
  • 1 Prozess ist thread(s)+allocated memory resources by OS (Heap, Register, Stapel, Klassenspeicher)

2
Ich denke, das ist die perfekte Antwort in der Welt der Informatik.
sofs1

1
Diese Antwort sollte die akzeptierte sein, nicht die Philosophie oben und unten
Eugen Sunic

10

Parallelität => Wenn mehrere Aufgaben in überlappenden Zeiträumen mit gemeinsam genutzten Ressourcen ausgeführt werden (wodurch möglicherweise die Ressourcennutzung maximiert wird).

Parallel => wenn eine einzelne Aufgabe in mehrere einfache unabhängige Unteraufgaben unterteilt ist, die gleichzeitig ausgeführt werden können.


Wie würden Sie ein Single-Core-Prozessorsystem beschreiben, das mehrere Aufgaben (Zeitscheiben) umfasst, um den Anschein einer überlappenden Verarbeitung zu erwecken? Wenn Parallelität als Ausführung in überlappenden Zeiträumen definiert ist, schließt sie diese Verarbeitung ein. Sie haben die gleichzeitige Ausführung beschrieben, die dies unter Ihrer Definition der Parallelität ausschließt.
Acarlon

9

Stellen Sie sich Warteschlangen vor, in denen der Server nur den ersten Job in einer Warteschlange bedienen kann.

1 Server, 1 Jobwarteschlange (mit 5 Jobs) -> keine Parallelität, keine Parallelität (Nur ein Job wird vollständig bearbeitet, der nächste Job in der Warteschlange muss warten, bis der betreute Job erledigt ist, und es gibt keinen anderen Server dafür Service it)

1 Server, 2 oder mehr verschiedene Warteschlangen (mit 5 Jobs pro Warteschlange) -> Parallelität (da der Server die Zeit mit allen ersten Jobs in Warteschlangen teilt, gleich oder gewichtet), immer noch keine Parallelität, da es zu jedem Zeitpunkt nur eine gibt Job wird gewartet.

2 oder mehr Server, eine Warteschlange -> Parallelität (2 Jobs gleichzeitig ausgeführt), aber keine Parallelität (Server teilt keine Zeit, der dritte Job muss warten, bis einer der Server abgeschlossen ist.)

2 oder mehr Server, 2 oder mehr verschiedene Warteschlangen -> Parallelität und Parallelität

Mit anderen Worten, die Parallelität teilt sich die Zeit, um einen Job abzuschließen. Sie kann dieselbe Zeit in Anspruch nehmen, um ihren Job abzuschließen, aber zumindest wird sie früh gestartet. Wichtig ist, dass Jobs in kleinere Jobs aufgeteilt werden können, was eine Verschachtelung ermöglicht.

Parallelität wird mit nur mehr CPUs, Servern, Personen usw. erreicht, die parallel ausgeführt werden.

Denken Sie daran, wenn die Ressourcen gemeinsam genutzt werden, kann keine reine Parallelität erreicht werden, aber hier hätte Parallelität den besten praktischen Nutzen, wenn Sie einen anderen Job annehmen, der diese Ressource nicht benötigt.


7

Ich werde eine Antwort anbieten, die ein wenig mit einigen der populären Antworten hier in Konflikt steht. Parallelität ist meiner Meinung nach ein allgemeiner Begriff, der Parallelität umfasst. Parallelität gilt für alle Situationen, in denen sich bestimmte Aufgaben oder Arbeitseinheiten zeitlich überschneiden. Parallelität gilt insbesondere für Situationen, in denen unterschiedliche Arbeitseinheiten gleichzeitig bewertet / ausgeführt werden. Das Ziel der Parallelität ist die Beschleunigung von Software, die von mehreren physischen Rechenressourcen profitieren kann. Das andere wichtige Konzept, das unter Parallelität passt, ist die Interaktivität. Interaktivitätgilt, wenn die Überlappung von Aufgaben von außen erkennbar ist. Das Ziel der Interaktivität besteht darin, Software zu entwickeln, die auf reale Entitäten wie Benutzer, Netzwerkkollegen, Hardware-Peripheriegeräte usw. reagiert.

Parallelität und Interaktivität sind nahezu unabhängige Dimensionen der Parallelität. Für ein bestimmtes Projekt interessieren sich Entwickler möglicherweise für eines, beide oder keines. Sie neigen dazu, sich zu verschmelzen, nicht zuletzt, weil der Greuel, der Fäden sind, ein einigermaßen bequemes Grundelement darstellt, um beides zu tun.

Ein bisschen mehr Details zur Parallelität :

Parallelität besteht in sehr kleinen Maßstäben (z. B. Parallelität auf Befehlsebene in Prozessoren), mittleren Maßstäben (z. B. Multicore-Prozessoren) und großen Maßstäben (z. B. Hochleistungs-Computercluster). Der Druck auf Softwareentwickler, mehr Parallelität auf Thread-Ebene aufzudecken, hat in den letzten Jahren aufgrund des Wachstums von Multicore-Prozessoren zugenommen. Parallelität ist eng mit dem Begriff der Abhängigkeit verbunden . Abhängigkeiten begrenzen das Ausmaß, in dem Parallelität erreicht werden kann; Zwei Aufgaben können nicht parallel ausgeführt werden, wenn eine von der anderen abhängt (Spekulation ignorieren).

Es gibt viele Muster und Frameworks, mit denen Programmierer Parallelität ausdrücken: Pipelines, Aufgabenpools, aggregierte Operationen an Datenstrukturen ("parallele Arrays").

Ein bisschen mehr Details zur Interaktivität :

Die einfachste und gebräuchlichste Art, Interaktivität durchzuführen, sind Ereignisse (dh eine Ereignisschleife und Handler / Rückrufe). Für einfache Aufgaben sind Veranstaltungen großartig. Der Versuch, komplexere Aufgaben mit Ereignissen zu erledigen, führt zum Stack-Ripping (auch bekannt als Callback Hell; auch bekannt als Control Inversion). Wenn Sie genug von Ereignissen haben, können Sie exotischere Dinge wie Generatoren, Coroutinen (auch bekannt als Async / Await) oder kooperative Themen ausprobieren.

Verwenden Sie aus Liebe zu zuverlässiger Software keine Threads, wenn Sie Interaktivität anstreben.

Unruhe

Ich mag Rob Pikes Slogan "Parallelität ist keine Parallelität, es ist besser" nicht. Parallelität ist weder besser noch schlechter als Parallelität. Parallelität umfasst Interaktivität, die nicht besser / schlechter mit Parallelität verglichen werden kann. Es ist wie zu sagen "Kontrollfluss ist besser als Daten".


6

In der Elektronik stellen seriell und parallel eine Art statische Topologie dar, die das tatsächliche Verhalten der Schaltung bestimmt. Wenn es keine Parallelität gibt, ist Parallelität deterministisch .

Um dynamische, zeitbezogene Phänomene zu beschreiben , verwenden wir die Begriffe sequentiell und gleichzeitig . Beispielsweise kann ein bestimmtes Ergebnis über eine bestimmte Abfolge von Aufgaben (z. B. ein Rezept) erzielt werden . Wenn wir mit jemandem sprechen, produzieren wir eine Folge von Wörtern. In der Realität finden jedoch viele andere Prozesse im selben Moment statt und stimmen somit mit dem tatsächlichen Ergebnis einer bestimmten Aktion überein . Wenn viele Leute gleichzeitig sprechen, können gleichzeitige Gespräche unsere Reihenfolge beeinträchtigen, aber die Ergebnisse dieser Störung sind nicht im Voraus bekannt. Parallelität führt Unbestimmtheit ein .

Die serielle / parallele und sequentielle / gleichzeitige Charakterisierung ist orthogonal. Ein Beispiel hierfür ist die digitale Kommunikation. In einem seriellen Adapter wird eine digitale Nachricht zeitlich (dh sequentiell ) entlang derselben Kommunikationsleitung (z. B. einer Leitung) verteilt. In einem parallelen Adapter wird dieser auch auf parallele Kommunikationsleitungen (z. B. viele Drähte) aufgeteilt und dann auf der Empfangsseite rekonstruiert.

Stellen wir uns ein Spiel mit 9 Kindern vor. Wenn wir sie als Kette entsorgen, zuerst eine Nachricht geben und am Ende empfangen, hätten wir eine serielle Kommunikation. Weitere Wörter bilden die Nachricht, die aus einer Folge von Kommunikationseinheiten besteht.

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

Dies ist ein sequentieller Prozess , der auf einer seriellen Infrastruktur reproduziert wird .

Stellen wir uns nun vor, wir teilen die Kinder in Dreiergruppen auf. Wir teilen die Phrase in drei Teile, geben die erste dem Kind der Linie zu unserer Linken, die zweite dem Kind der Mittellinie usw.

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

Dies ist ein sequentieller Prozess , der auf einer parallelen Infrastruktur reproduziert wird (obwohl teilweise noch serialisiert).

In beiden Fällen wird das Ergebnis im Voraus festgelegt , vorausgesetzt, es besteht eine perfekte Kommunikation zwischen den Kindern .

Wenn es andere Personen gibt, die gleichzeitig mit Ihnen mit dem ersten Kind sprechen, haben wir gleichzeitige Prozesse . Wir wissen nicht, welcher Prozess von der Infrastruktur berücksichtigt wird, daher steht das endgültige Ergebnis nicht im Voraus fest.


+1 Interessant. Bei der Berechnung einer Definition bedeutet gemäß der aktuell akzeptierten Antwort die gleichzeitige Ausführung in überlappenden Zeiträumen, nicht unbedingt gleichzeitig (was parallel wäre). Wie beschreiben Sie in der Elektronik Schaltkreise, die so gestaltet sind, dass sie den Eindruck erwecken, dass gleichzeitig etwas passiert, aber nur sehr schnell schalten? Um Ihre Eisanalogie fortzusetzen: Ich mag Eis so sehr> Kind A1 Ich mag> Kind B1 Eis> Kind C1 so sehr> Kind A2 Ich mag> Kind B2 Eis <Kind C2 so sehr ...
Acarlon

Ich habe das hier zum ersten Mal gesehen: s1l3n0.blogspot.com/2013/04/… .
FrankHB

Ja, ich habe meine Antwort in einer meiner persönlichen Blog-Notizen etwas verfeinert / erweitert. ;)
s1l3n0

5

Parallelität ist die verallgemeinerte Form der Parallelität. Zum Beispiel kann paralleles Programm auch als gleichzeitiges Programm bezeichnet werden, aber umgekehrt ist nicht wahr.

  1. Die gleichzeitige Ausführung ist auf einem einzelnen Prozessor möglich (mehrere Threads, die vom Scheduler oder Thread-Pool verwaltet werden).

  2. Eine parallele Ausführung ist nicht auf einem einzelnen Prozessor, sondern auf mehreren Prozessoren möglich. (Ein Prozess pro Prozessor)

  3. Verteiltes Rechnen ist ebenfalls ein verwandtes Thema und kann auch als gleichzeitiges Rechnen bezeichnet werden, aber umgekehrt ist nicht wahr, wie Parallelität.

Weitere Informationen finden Sie in diesem Forschungsbericht Konzepte der gleichzeitigen Programmierung


5

Diese grafische Darstellung aus einer anderen Antwort hat mir sehr gut gefallen - ich denke, sie beantwortet die Frage viel besser als viele der oben genannten Antworten

Parallelität und Parallelität Wenn zwei Threads parallel ausgeführt werden, werden beide gleichzeitig ausgeführt. Wenn wir beispielsweise zwei Threads haben, A und B, sieht ihre parallele Ausführung folgendermaßen aus:

CPU 1: A ------------------------->

CPU 2: B ------------------------->

Wenn zwei Threads gleichzeitig ausgeführt werden, überlappt sich ihre Ausführung. Überlappungen können auf zwei Arten auftreten: Entweder werden die Threads gleichzeitig ausgeführt (dh parallel wie oben), oder ihre Ausführungen werden wie folgt auf dem Prozessor verschachtelt:

CPU 1: A -----------> B ----------> A -----------> B -------- ->

Für unsere Zwecke kann Parallelität daher als Sonderfall der Parallelität betrachtet werden

Quelle: Eine andere Antwort hier

Ich hoffe, das hilft.


4

Ich mag die Antwort von Paul Butcher auf diese Frage sehr (er ist der Autor von sieben Parallelitätsmodellen in sieben Wochen ):

Obwohl sie oft verwirrt sind, sind Parallelität und Parallelität verschiedene Dinge. Parallelität ist ein Aspekt der Problemdomäne - Ihr Code muss mehrere gleichzeitige (oder nahezu gleichzeitige) Ereignisse verarbeiten . Im Gegensatz dazu ist Parallelität ein Aspekt der Lösungsdomäne. Sie möchten, dass Ihr Programm schneller ausgeführt wird, indem Sie verschiedene Teile des Problems parallel verarbeiten. Einige Ansätze sind auf Parallelität anwendbar, einige auf Parallelität und einige auf beide. Verstehen Sie, mit welchen Problemen Sie konfrontiert sind, und wählen Sie das richtige Werkzeug für den Job.


3

Parallelität kann Aufgaben beinhalten, die gleichzeitig ausgeführt werden oder nicht (sie können zwar in separaten Prozessoren / Kernen ausgeführt werden, aber sie können auch in "Ticks" ausgeführt werden). Was ist wichtig ist , dass die Parallelität beziehen sich immer auf ein Stück einer größeren Aufgabe zu tun . Im Grunde ist es ein Teil einiger Berechnungen. Sie müssen klug sein, was Sie gleichzeitig tun können und was nicht und wie Sie synchronisieren.

Parallelität bedeutet, dass Sie nur einige Dinge gleichzeitig tun. Sie müssen nicht Teil der Lösung eines Problems sein. Ihre Threads können beispielsweise jeweils ein einzelnes Problem lösen. Natürlich gilt auch das Synchronisationsmaterial, aber aus einer anderen Perspektive.


3

"Parallelität" ist, wenn mehrere Dinge im Gange sind .

„Parallelismus“ ist , wenn gleichzeitig die Dinge entwickeln zugleich .


Beispiele für Parallelität ohne Parallelität:

  • Mehrere Threads auf einem Kern.
  • Mehrere Nachrichten in einer Win32-Nachrichtenwarteschlange.
  • Mehrere SqlDataReaders auf einer MARS- Verbindung.
  • Mehrere JavaScript- Versprechen in einem Browser-Tab.

Beachten Sie jedoch, dass der Unterschied zwischen Parallelität und Parallelität häufig eine Frage der Perspektive ist. Die obigen Beispiele sind aus der Perspektive (beobachtbare Auswirkungen) der Ausführung Ihres Codes nicht parallel. Aber es gibt Parallelität auf Befehlsebene sogar innerhalb eines einzelnen Kerns. Es gibt Hardware-Teile, die parallel zur CPU arbeiten und die CPU dann unterbrechen, wenn sie fertig sind. Die GPU zeichnet möglicherweise auf dem Bildschirm, während die Fensterprozedur oder der Ereignishandler ausgeführt wird. Das DBMS durchläuft möglicherweise B-Bäume für die nächste Abfrage, während Sie noch die Ergebnisse der vorherigen Abfrage abrufen. Der Browser führt möglicherweise ein Layout oder ein Netzwerk aus, während Ihr Browser Promise.resolve()ausgeführt wird. Usw. ...

Hier bitteschön. Die Welt ist so chaotisch wie immer;)


3

Die einfachste und eleganteste Art, die beiden zu verstehen, ist meiner Meinung nach diese. Parallelität ermöglicht die Verschachtelung der Ausführung und kann so die Illusion von Parallelität erzeugen . Dies bedeutet, dass ein gleichzeitiges System Ihr Youtube-Video ausführen kann, während Sie beispielsweise ein Dokument in Word schreiben. Das zugrunde liegende Betriebssystem als gleichzeitiges System ermöglicht es diesen Aufgaben, ihre Ausführung zu verschachteln. Da Computer Anweisungen so schnell ausführen, sieht es so aus, als würden zwei Dinge gleichzeitig ausgeführt.

Parallelismus ist , wenn solche Dinge wirklich sind parallel. Im obigen Beispiel stellen Sie möglicherweise fest, dass der Videoverarbeitungscode auf einem einzelnen Kern ausgeführt wird und die Word-Anwendung auf einem anderen ausgeführt wird. Beachten Sie, dass dies bedeutet, dass ein gleichzeitiges Programm auch parallel sein kann! Durch die Strukturierung Ihrer Anwendung mit Threads und Prozessen kann Ihr Programm die zugrunde liegende Hardware ausnutzen und möglicherweise parallel ausgeführt werden.

Warum muss dann nicht alles parallel sein? Ein Grund dafür ist, dass Parallelität eine Möglichkeit zur Strukturierung von Programmen darstellt und eine Entwurfsentscheidung darstellt, um die Trennung von Bedenken zu erleichtern, während Parallelität häufig im Namen der Leistung verwendet wird. Ein weiterer Grund ist, dass einige Dinge grundsätzlich nicht vollständig parallel ausgeführt werden können. Ein Beispiel hierfür wäre das Hinzufügen von zwei Dingen am Ende einer Warteschlange - Sie können nicht beide gleichzeitig einfügen. Etwas muss zuerst und das andere dahinter gehen, sonst bringt man die Warteschlange durcheinander. Obwohl wir eine solche Ausführung verschachteln können (und so eine gleichzeitige Warteschlange erhalten), können Sie sie nicht parallel haben.

Hoffe das hilft!


3

Die gleichzeitige Programmierung betrifft Operationen, die sich zu überlappen scheinen, und befasst sich hauptsächlich mit der Komplexität, die sich aus dem nicht deterministischen Kontrollfluss ergibt. Die quantitativen Kosten, die mit gleichzeitigen Programmen verbunden sind, sind typischerweise sowohl Durchsatz als auch Latenz. Gleichzeitige Programme sind häufig E / A-gebunden, jedoch nicht immer, z. B. befinden sich gleichzeitige Garbage Collectors vollständig auf der CPU. Das pädagogische Beispiel eines gleichzeitigen Programms ist ein Webcrawler. Dieses Programm initiiert Anforderungen für Webseiten und akzeptiert die Antworten gleichzeitig, sobald die Ergebnisse der Downloads verfügbar sind, und sammelt eine Reihe von Seiten, die bereits besucht wurden. Der Kontrollfluss ist nicht deterministisch, da die Antworten nicht jedes Mal, wenn das Programm ausgeführt wird, in derselben Reihenfolge empfangen werden müssen. Diese Eigenschaft kann das Debuggen gleichzeitiger Programme sehr erschweren. Einige Anwendungen sind grundsätzlich gleichzeitig ausgeführt, z. B. müssen Webserver Clientverbindungen gleichzeitig verarbeiten. Erlang ist vielleicht die vielversprechendste kommende Sprache für die hochkonkurrierende Programmierung.

Die parallele Programmierung betrifft Vorgänge, die sich für das spezifische Ziel der Verbesserung des Durchsatzes überlappen. Die Schwierigkeiten der gleichzeitigen Programmierung werden umgangen, indem der Kontrollfluss deterministisch gemacht wird. In der Regel erzeugen Programme Sätze von untergeordneten Aufgaben, die parallel ausgeführt werden, und die übergeordnete Aufgabe wird erst fortgesetzt, wenn jede Unteraufgabe abgeschlossen ist. Dies erleichtert das Debuggen paralleler Programme erheblich. Der schwierige Teil der parallelen Programmierung ist die Leistungsoptimierung in Bezug auf Themen wie Granularität und Kommunikation. Letzteres ist im Zusammenhang mit Multicores immer noch ein Problem, da mit der Übertragung von Daten von einem Cache in einen anderen erhebliche Kosten verbunden sind. Dichte Matrix-Matrix-Multiplikation ist ein pädagogisches Beispiel für parallele Programmierung und kann mithilfe von Straasen effizient gelöst werden. s Divide-and-Conquer-Algorithmus und paralleler Angriff auf die Unterprobleme. Cilk ist möglicherweise die vielversprechendste Sprache für die leistungsstarke parallele Programmierung auf Computern mit gemeinsamem Speicher (einschließlich Multicores).

Von meiner Antwort kopiert: https://stackoverflow.com/a/3982782


2

Parallelität: Mehrere Threads führen ähnliche Aufgaben aus, die in Bezug auf Daten und Ressourcen unabhängig voneinander sind. Beispiel: Google Crawler kann Tausende von Threads erzeugen und jeder Thread kann seine Aufgabe unabhängig ausführen.

Parallelität: Parallelität wird angezeigt, wenn Sie Daten und Ressourcen zwischen den Threads gemeinsam genutzt haben. In einem Transaktionssystem bedeutet dies, dass Sie den kritischen Abschnitt des Codes mithilfe einiger Techniken wie Sperren, Semaphoren usw. synchronisieren müssen.


Dies sollte die akzeptierte Antwort der IMO sein, da sie das Wesentliche der beiden Begriffe erfasst.
Michid

2

(Ich bin ziemlich überrascht, dass eine so grundlegende Frage jahrelang nicht richtig und ordentlich gelöst wird ...)

Kurz gesagt, sowohl Parallelität als auch Parallelität sind Eigenschaften des Rechnens .

In Bezug auf den Unterschied ist hier die Erklärung von Robert Harper :

Das erste, was zu verstehen ist, ist, dass Parallelität nichts mit Parallelität zu tun hat . Parallelität befasst sich mit der nichtdeterministischen Zusammensetzung von Programmen (oder deren Komponenten). Parallelität befasst sich mit der asymptotischen Effizienz von Programmen mit deterministischem Verhalten. Bei der Parallelität geht es darum, das Unverwaltbare zu verwalten: Ereignisse kommen aus Gründen, die außerhalb unserer Kontrolle liegen, und wir müssen darauf reagieren. Ein Benutzer klickt mit der Maus, der Fenstermanager muss reagieren, obwohl die Anzeige Aufmerksamkeit erfordert. Solche Situationen sind von Natur aus nicht deterministisch, aber wir beschäftigen sie auch Pro-forma einNichtdeterminismus in einer deterministischen Umgebung, indem vorgetäuscht wird, dass Komponenten Ereignisse in einer beliebigen Reihenfolge signalisieren und dass wir auf sie reagieren müssen, sobald sie entstehen. Nichtdeterministische Komposition ist eine mächtige Idee zur Programmstrukturierung. Bei der Parallelität geht es dagegen um Abhängigkeiten zwischen den Teilberechnungen einer deterministischen Berechnung. Das Ergebnis steht außer Zweifel, aber es gibt viele Möglichkeiten, es zu erreichen, einige effizienter als andere. Wir möchten diese Möglichkeiten zu unserem Vorteil nutzen.

Sie können verschiedene orthogonale Eigenschaften in Programmen sein. Lesen Sie diesen Blog-Beitrag für weitere Abbildungen. Und dieser diskutierte etwas mehr über Unterschiede bei Komponenten in der Programmierung , wie Threads.

Beachten Sie, dass Threading oder Multitasking alle Implementierungen von Computing sind, die konkreteren Zwecken dienen. Sie können mit Parallelität und Parallelität in Verbindung gebracht werden, jedoch nicht in wesentlicher Weise. Daher sind sie kaum gute Einträge, um die Erklärung zu beginnen.

Noch ein Highlight: (physikalische) "Zeit" hat fast nichts mit den hier diskutierten Eigenschaften zu tun. Zeit ist nur ein Weg zur Durchführung der Messung, um die Bedeutung der Eigenschaften aufzuzeigen, aber weit entfernt von der Essenz. Denken Sie zweimal über die Rolle der "Zeit" in der Zeitkomplexität nach - was mehr oder weniger ähnlich ist, selbst die Messung ist in diesem Fall oft bedeutender.


2

"Concurrent" macht Dinge - alles - gleichzeitig. Es könnten verschiedene Dinge sein oder dasselbe. Trotz der akzeptierten Antwort, die fehlt, geht es nicht darum, "zur gleichen Zeit zu sein". Es ist wirklich zur gleichen Zeit. Sie benötigen mehrere CPU-Kerne, die entweder gemeinsam genutzten Speicher innerhalb eines Hosts oder verteilten Speicher auf verschiedenen Hosts verwenden, um gleichzeitig Code auszuführen. Ein Beispiel sind Pipelines mit drei verschiedenen Aufgaben, die gleichzeitig ausgeführt werden: Aufgabenebene 2 muss auf Einheiten warten, die von Aufgabenebene 1 abgeschlossen wurden, und Aufgabenebene 3 muss auf Arbeitseinheiten warten, die von abgeschlossen wurden Aufgabenstufe 2. Ein weiteres Beispiel ist die Parallelität von 1-Hersteller mit 1-Verbraucher. oder viele Produzenten und 1 Verbraucher; Leser und Schriftsteller; et al.

"Parallel" macht die gleichen Dinge zur gleichen Zeit. Es ist gleichzeitig, aber es ist außerdem dasselbe Verhalten, das zur gleichen Zeit und am typischsten bei verschiedenen Daten auftritt. Matrixalgebra kann häufig parallelisiert werden, da dieselbe Operation wiederholt ausgeführt wird: Beispielsweise können die Spaltensummen einer Matrix alle gleichzeitig mit demselben Verhalten (Summe), jedoch in unterschiedlichen Spalten berechnet werden. Es ist eine gängige Strategie, die Spalten auf verfügbare Prozessorkerne aufzuteilen (aufzuteilen), sodass Sie nahezu dieselbe Arbeitsmenge (Anzahl der Spalten) haben, die von jedem Prozessorkern verarbeitet wird. Eine andere Möglichkeit, die Arbeit aufzuteilen, sind viele Aufgaben, bei denen die Mitarbeiter, die ihre Arbeit beenden, zu einem Manager zurückkehren, der die Arbeit austeilt und dynamisch mehr Arbeit erhält, bis alles erledigt ist. Der Ticketing-Algorithmus ist ein anderer.

Es kann nicht nur numerischer Code parallelisiert werden. Zu oft können Dateien parallel verarbeitet werden. In einer Anwendung zur Verarbeitung natürlicher Sprache müssen Sie möglicherweise für jede der Millionen von Dokumentdateien die Anzahl der Token im Dokument zählen. Dies ist parallel, da Sie für jede Datei Token zählen, was dasselbe Verhalten ist.

Mit anderen Worten, Parallelität liegt vor, wenn dasselbe Verhalten gleichzeitig ausgeführt wird. Gleichzeitig bedeutet zur gleichen Zeit, aber nicht unbedingt das gleiche Verhalten. Parallel ist eine bestimmte Art von Parallelität, bei der dasselbe zur gleichen Zeit geschieht.

Zu den Begriffen gehören beispielsweise atomare Anweisungen, kritische Abschnitte, gegenseitiger Ausschluss, Spin-Warten, Semaphoren, Monitore, Barrieren, Nachrichtenübermittlung, Kartenreduzierung, Herzschlag, Ring, Ticketing-Algorithmen, Threads, MPI, OpenMP.

Gregory Andrews 'Arbeit ist ein Top-Lehrbuch: Multithreaded, Parallel und Distributed Programming.


1

Großartig, lassen Sie mich ein Szenario nehmen, um zu zeigen, was ich verstehe. Angenommen, es gibt 3 Kinder mit den Namen: A, B, C. A und B reden, C hören zu. Für A und B sind sie parallel: A: Ich bin A. B: Ich bin B.

Aber für C muss sein Gehirn den gleichzeitigen Prozess ausführen, um A und B zu hören, vielleicht: Ich bin IA bin B.


1

Parallelität einfach bedeutet, dass mehr als eine Aufgabe ausgeführt wird (nicht parallel erforderlich). Nehmen wir zum Beispiel an, wir haben zu jedem Zeitpunkt drei Aufgaben: Es können mehr als eine oder alle gleichzeitig ausgeführt werden.

Parallelität bedeutet, dass sie buchstäblich parallel laufen. In diesem Fall müssen also alle drei gleichzeitig ausgeführt werden.


1

Pikes Begriff "Parallelität" ist eine absichtliche Entwurfs- und Implementierungsentscheidung. Ein gleichzeitig fähiges Programmdesign kann eine verhaltensbezogene "Parallelität" aufweisen oder nicht. Dies hängt von der Laufzeitumgebung ab.

Sie möchten nicht, dass ein Programm, das nicht für Parallelität ausgelegt ist, Parallelität aufweist. :-) In dem Maße, in dem es sich um einen Nettogewinn für die relevanten Faktoren (Stromverbrauch, Leistung usw.) handelt, möchten Sie ein maximal gleichzeitiges Design, damit das Host-System seine Ausführung nach Möglichkeit parallelisieren kann.

Pikes Programmiersprache Go veranschaulicht dies im Extremfall: Seine Funktionen sind alle Threads, die gleichzeitig korrekt ausgeführt werden können. Das Aufrufen einer Funktion erstellt immer einen Thread, der parallel zum Aufrufer ausgeführt wird, wenn das System dazu in der Lage ist. Eine Anwendung mit Hunderten oder sogar Tausenden von Threads ist in seiner Welt völlig normal. (Ich bin kein Go-Experte, das ist nur meine Meinung dazu.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.