it-swarm.com.de

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

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

Beispiele werden geschätzt.

837
StackUnderflow

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

Parallelismus ist, wenn Aufgaben wörtlich gleichzeitig ausgeführt werden, z. B. auf einem Multicore-Prozessor.


Zitieren Suns Multithreaded-Programmierhandbuch :

  • Parallelität: Eine Bedingung, die besteht, wenn mindestens zwei Threads Fortschritte machen. Eine allgemeinere Form der Parallelität, die Zeitscheiben als eine Form der virtuellen Parallelität einschließen kann.

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

1033
RichieHindle

Warum die Verwirrung besteht

Es besteht Verwirrung, da die Wörterbuchbedeutungen dieser beiden Wörter fast identisch sind:

  • Concurrent : Vorhanden, geschehen oder gleichzeitig geschehen (dictionary.com)
  • Parallel : sehr ähnlich und häufig gleichzeitig (merriam webster).

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

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

Was meine ich mit den obigen Definitionen?

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

  1. Besorgen Sie sich einen Reisepass
  2. Lass eine Präsentation fertig sein

Das Problem ist nun, dass Sie bei Aufgabe 1 zu einem extrem bürokratischen Regierungsbüro gehen müssen, bei dem Sie 4 Stunden in der Schlange warten müssen, um Ihren Pass 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 Passamt, warten 4 Stunden in der Warteschlange, 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 Stunde anstatt 5 Stunden länger arbeiten.

In diesem Fall erledigen Sie beide Aufgaben in Einzelteilen. 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 durch die Unterbrechbarkeit beider Aufgaben möglich.

Parallelität, IMO, kann als die "Isolation" -Eigenschaft in ACID verstanden werden. Zwei Datenbanktransaktionen werden als isoliert betrachtet, wenn Subtransaktionen auf jede 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 sowohl für die Pass- als auch für die PräsentationsaufgabenSie der einzige Scharfrichter sind.

Fall 3: Parallele Ausführung

Nun, da du so ein kluger Kerl bist, bist du offensichtlich ein Höherer und hast einen Assistenten. Bevor Sie mit der Passaufgabe beginnen, rufen Sie ihn an und fordern ihn auf, den ersten Entwurf der Präsentation vorzubereiten. Sie verbringen den ganzen Tag damit, die Passaufgabe zu erledigen, kehren zurück, sehen Ihre Mails und finden den Präsentationsentwurf. Er hat eine ziemlich solide Arbeit geleistet und mit einigen Änderungen in zwei weiteren Stunden haben Sie sie abgeschlossen.

Da Ihr Assistent jetzt genauso schlau ist wie Sie, konnte erunabhängigdaran arbeiten, ohne Sie ständig um Abklärungen bitten zu müssen. Aufgrund der Unabhängigkeit der Aufgaben wurden sie zur gleichen Zeit vonzwei verschiedenen Henkernausgeführt.

Immer noch bei mir? In Ordung...

Fall 4: Parallel aber nicht parallel

Erinnern Sie sich an Ihre Passaufgabe, wo 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 hat die PassaufgabeUnterbrechbarkeit(Sie können sie anhalten, während Sie in der Leitung warten, und später fortsetzen, wenn Ihre Nummer angerufen wird), aber keineindependentability(Ihr Assistent kann nicht an Ihrer Stelle warten).

Fall 5: Parallel aber nicht gleichzeitig

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

In diesem Fall ist die Passaufgabe wederunabhängignochunterbrechbar. Selbst wenn Sie in der Warteschlange stehen, können Sie nicht an etwas anderem arbeiten, da Sie nicht über die erforderliche Ausrüstung verfügen.

Nehmen wir an, die Präsentation ist so mathematisch, dass Sie für mindestens 5 Stunden 100% Konzentration benötigen. Sie können dies nicht tun, während Sie in der Warteschlange auf die Passaufgabe warten, selbst wenn Sie Ihren Laptop dabei haben.

In diesem Fall lautet die Präsentationsaufgabeindependentable(entweder Sie oder Ihr Assistent können 5 Stunden fokussierten Aufwand aufwenden), nicht jedochunterbrechbar.

Fall 6: Gleichzeitige und parallele Ausführung

Angenommen, Sie weisen der Präsentation nicht nur Ihren Assistenten zu, sondern haben auch einen Laptop für die Passaufgabe bei sich. Während Sie in der Warteschlange 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 nur 15 Minuten, anstatt 2 Stunden, um den Entwurf fertigzustellen.

Dies war möglich, weil die PräsentationsaufgabeUnabhängigkeit(einer von Ihnen kann es tun) undUnterbrechbarkeit(Sie können es tun) hat stoppen Sie es und setzen Sie es später fort). Sie haben also gleichzeitigbeideAufgaben 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. So 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 hinauszuschleichen, vor dem Anrufen Ihrer Nummer zurückzukehren und das Warten fortzusetzen dich 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 gibt es für jeden dieser Fälle typische Beispielszenarien:

  • Fall 1: Interruptverarbeitung.
  • Fall 2: Wenn nur ein Prozessor vorhanden ist, aber alle ausgeführten Tasks aufgrund von E/A Wartezeiten haben.
  • Fall 3: Wird oft 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 eskönntepassieren. Angenommen, Ihre Aufgabe erfordert Zugriff auf einen speziellen Computerchip, auf den nur über Prozessor-1 zugegriffen werden kann. Selbst wenn also Prozessor-2 frei ist und Prozessor-1 eine andere Aufgabe ausführt, kann die spezielle Rechenaufgabe nicht mit Prozessor-2 fortfahren.
  • Fall 5: ebenfalls selten, aber nicht ganz so selten wie Fall 4. Ein nicht gleichzeitig ablaufender Code kann eine durch Mutexe geschützte kritische Region sein. Sobald es gestartet ist, muss esvollständig ausgeführt werden. Es können jedoch zwei verschiedene kritische Bereiche gleichzeitig auf zwei verschiedenen Prozessoren ausgeführt werden.
  • Fall 6: IMO, die meisten Diskussionen über parallele oder gleichzeitige Programmierung beziehen sich im Wesentlichen auf Fall 6. Dies ist eine Mischung aus parallelen und gleichzeitigen Ausführungen.

Parallelität und Los

Wenn Sie verstehen, 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 diese lange sequenzielle Aufgabe einfach auf, damit Sie etwas Nützliches tun können, während Sie warten.“ Deshalb spricht er über verschiedene Organisationen mit verschiedenen Mitgliedern.

Jetzt liegt die Stärke von Go darin, dieses Brechen mit dem Schlüsselwort go und den Channels zu vereinfachen. Außerdem bietet die 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?

397
Methos

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

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

Aufgabe: Brennen Sie einen Haufen veralteter Sprachhandbücher! Eins nach dem anderen!

Task

Concurrency: Es gibt viele gleichzeitige Zerlegungen der Aufgabe! Ein Beispiel:

Gophers

Parallelism: Die vorherige Konfiguration wird parallel ausgeführt, wenn mindestens zwei Gopper gleichzeitig arbeiten oder nicht.

223
asfer

Zu dem hinzufügen, was andere gesagt haben:

Nebenläufigkeit ist wie ein Jongleur, der viele Bälle jongliert. Unabhängig davon, wie es scheint, fängt der Jongleur nur einen Ball pro Hand. Parallelismus bedeutet, dass mehrere Jongleure gleichzeitig mit Bällen jonglieren.

126
Thomas T

Angenommen, Sie haben ein Programm, das zwei Threads hat. 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 haben wir Parallelität aufgrund der Tatsache, dass mehr als ein Thread ausgeführt wird.

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

Wenn wir dieses Programm auf einem Computer mit einer Multi-Core-CPU ausführen, können wir die beiden Threads gleichzeitig in parallel - nebeneinander ausführen.

94
Pithikos

Nebenläufigkeit: 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

40
Rajendra Uppal

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

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

In den folgenden Szenarien werden hoffentlich mehrere Möglichkeiten zur Durchführung dieser 10 Spiele beschrieben:

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

die gesamte Veranstaltung wird also in etwa 101 Minuten abgeschlossen sein (WORST APPROACH)

2) CONCURRENT - Nehmen wir an, der Profi spielt seinen Zug und wechselt zum nächsten Spieler, so dass alle 10 Spieler gleichzeitig spielen, aber der Profispieler ist nicht mit zwei Personen gleichzeitig, er spielt seinen Zug und fährt mit dem nächsten fort Person. Nehmen wir jetzt an, der professionelle Spieler braucht 6 Sekunden, um seinen Zug zu spielen, und auch die Übergangszeit des Profispielers mit zwei Spielern beträgt 6 Sekunden. Die gesamte Übergangszeit, um zum ersten Spieler zurückzukehren, beträgt 1 Minute (10x6 Sekunden). Daher sind bis zu seiner Rückkehr zur ersten Person, mit der das Ereignis gestartet wurde, 2 Minuten vergangen (10x_per_turn_by_champion + 10xtransition_time = 2min).

Angenommen, alle Spieler brauchen 45 Sekunden, um ihren Spielzug zu beenden, basierend auf 10 Minuten pro Spiel vom SERIAL-Ereignis die Nr. von Runden vor Spielende sollten 600/(45 + 6) = 11 Runden (ca.)

Das gesamte Event wird also in 11x_per_turn_by_player _ & _ champion + 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ätzliches Geld und haben sich daher entschlossen, zwei professionelle Champions (beide gleichermaßen fähig) einzuladen. Sie teilen die gleichen 10 Spieler (Herausforderer) in jeweils zwei Gruppen von je fünf und ordnete sie zwei Champions zu, dh jeweils einer Gruppe. Nun läuft das Ereignis in diesen beiden Sätzen parallel, d. H. Mindestens zwei Spieler (einer in jeder Gruppe) spielen gegen die beiden professionellen Spieler in ihrer jeweiligen Gruppe.

Innerhalb der Gruppe nimmt der professionelle Spieler jedoch jeweils einen Spieler (d. H. Nacheinander) mit, so dass Sie ohne Berechnung leicht darauf schließen können, dass das gesamte Ereignis in 101/2 = 50,5 Minuten abgeschlossen ist

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

4) CONCURRENT + PARALLEL - Im obigen Szenario nehmen wir an, dass die beiden Champions gleichzeitig mit den 5 Spielern in ihren jeweiligen Gruppen spielen (lesen Sie den 2. Punkt), so dass nun Spiele zwischen den Gruppen parallel laufen, jedoch innerhalb der Gruppe laufen gleichzeitig.

Die Spiele in einer Gruppe werden also ungefähr in 11x_per_turn_by_player _ & _ champion + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sek = ungefähr 15.5min

Die gesamte Veranstaltung (mit zwei parallel laufenden Gruppen) wird ungefähr in 15.5 Minuten abgeschlossen sein

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

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

SERIAL> PARALLEL> CONCURRENT> CONCURRENT + PARALLEL

(HINWEIS: Diese Reihenfolge kann sich für andere Szenarien ändern, da diese Reihenfolge in hohem Maße von der Abhängigkeit der Jobs, den Kommunikationsanforderungen für s/w-Jobs und dem Übergangs-Overhead für s/w-Jobs abhängt.)

30
sactiw

Übereinstimmung: mehrere Ausführungsflüsse mit dem Potenzial, Ressourcen gemeinsam zu nutzen

Ex: zwei Threads, die um einen E/A-Port konkurrieren. 

parallelität: Aufteilen eines Problems in mehrere ähnliche Blöcke.

Ex: Analysieren einer großen Datei durch Ausführen von zwei Prozessen auf jeder Hälfte der Datei.

27
Mihai Toader

Einfaches Beispiel:

Gleichzeitiges ist: "Zwei Warteschlangen, die auf eine ATM-Maschine zugreifen"

Parallel heißt: "Zwei Warteschlangen und zwei Geldautomaten"

25
Saurabh Pakhare

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

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

24
JP Alioto

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 schauen. Das ist Parallelität.

Jetzt bist du ein professioneller Programmierer. Und Sie hören gerne ruhige Musik beim Programmieren. Das ist Parallelismus.

Genießen.

14
Ramy Mohamed

Stellen Sie sich das als Warteschlangen für Wartungen vor, bei denen der Server nur den ersten Job in einer Warteschlange bedienen kann.

1 Server, 1 Job-Warteschlange (mit 5 Jobs) -> Keine Parallelität, keine Parallelität (Nur ein Job wird bis zum Abschluss bearbeitet. Der nächste Job in der Warteschlange muss warten, bis der gewartete Job abgeschlossen ist und kein anderer Server vorhanden ist 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), noch immer keine Parallelität, da zu jedem Zeitpunkt nur einer vorhanden ist Job wird gewartet.

2 oder mehr Server, eine Warteschlange -> Parallelität (2 Jobs gleichzeitig ausgeführt), aber keine Parallelität (Server teilt sich keine Zeit, der 3. 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: Nebenläufigkeit teilt sich die Zeit, um einen Job abzuschließen. Es kann die gleiche Zeit in Anspruch nehmen, bis der Job abgeschlossen ist, aber zumindest wird er frühzeitig gestartet. Wichtig ist, dass Jobs in kleinere Jobs aufgeteilt werden können, was Interleaving ermöglicht.

Parallelität wird mit nur mehr parallel laufenden CPUs, Servern, Mitarbeitern usw. erreicht.

Wenn die Ressourcen gemeinsam genutzt werden, kann kein reiner Parallelismus erreicht werden. An dieser Stelle wäre Parallelität jedoch am besten für die Praxis geeignet, wenn Sie einen anderen Job annehmen, der diese Ressource nicht benötigt. 

9
Rahul

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

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

8
MBK

Die Ausführung der gleichzeitigen Programmierung hat zwei Arten: 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 gleichzeitig zu laufen scheinen, in Wirklichkeit jedoch nicht. Bei nicht parallelen Parallelitätsthreads wechseln Sie schnell und wechseln den Prozessor durch Time-Slicing. Während der Parallelität mehrere Prozessoren zur Verfügung stehen, können mehrere Threads gleichzeitig auf verschiedenen Prozessoren ausgeführt werden.  enter image description here

Referenz: Einführung in Parallelität in Programmiersprachen

8
Apurva Thorat

Ich werde eine Antwort anbieten, die mit den populären Antworten hier ein wenig in Konflikt steht. Gleichzeitigkeit ist meiner Meinung nach ein allgemeiner Begriff, der Parallelität einschließt. Concurrency gilt für alle Situationen, in denen sich bestimmte Aufgaben oder Arbeitseinheiten zeitlich überschneiden. Parallelismus gilt insbesondere für Situationen, in denen unterschiedliche Arbeitseinheiten zur gleichen Zeit ausgewertet/ausgeführt werden. Durch die Parallelität von Parallelität wird Software beschleunigt, die von mehreren physischen Rechenressourcen profitieren kann. Das andere Hauptkonzept, das unter Parallelität passt, ist Interaktivität. Interaktivität gilt, wenn die Überlappung von Aufgaben von außen beobachtet werden kann. Der Sinn der Interaktivität besteht darin, Software zu entwickeln, die auf reale Entitäten wie Benutzer, Netzwerkpartner, Hardware-Peripheriegeräte usw. reagiert.

Parallelität und Interaktivität sind fast völlig unabhängige Dimensionen der Parallelität. Für ein bestimmtes Projekt interessieren sich Entwickler entweder für beides oder für beides. Sie neigen dazu, verschmolzen zu werden, nicht zuletzt deshalb, weil der abscheuliche Faden, der als Threads dient, ein einigermaßen praktisches Grundelement darstellt, um beides zu tun.

Etwas mehr über Parallelität :

Parallelität existiert in sehr kleinen Maßstäben (z. B. Parallelität in Prozessoren auf Befehlsebene), mittleren Maßstäben (z. B. Multicore-Prozessoren) und großen Maßstäben (z. B. Hochleistungs-Rechenclustern). Der Druck auf Softwareentwickler, mehr Parallelität auf Thread-Ebene aufzuzeigen, hat in den letzten Jahren aufgrund des Wachstums von Multicore-Prozessoren zugenommen. Parallelität ist eng mit dem Begriff 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ängig ist (Spekulation ignorieren).

Es gibt viele Muster und Frameworks, mit denen Programmierer Parallelität ausdrücken können: Pipelines, Task-Pools, Aggregationsoperationen für Datenstrukturen ("parallele Arrays").

Etwas mehr über Interaktivität :

Die grundlegendste und gebräuchlichste Art und Weise der Interaktivität ist mit Ereignissen (d. H. Einer Ereignisschleife und Handlern/Rückrufen). Für einfache Aufgaben sind Events großartig. Der Versuch, komplexere Aufgaben mit Ereignissen zu erledigen, führt zum Stack-Ripping (a.k.a. Callback Hell; a.k.a. Control Inversion). Wenn Sie genug von Ereignissen haben, können Sie exotischere Dinge ausprobieren, z. B. Generatoren, Coroutines (ua Async/Await) oder kooperative Threads.

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

Gepflegte

Ich mag Rob Pikes "Parallelität ist nicht Parallelität; er ist besser" -Slogan. Nebenläufigkeit ist weder besser noch schlechter als Parallelität. Parallelität umfasst Interaktivität, die nicht besser/schlechter mit Parallelismus verglichen werden kann. Es ist so, als würde man sagen "Kontrollfluss ist besser als Daten".

7
Ben Ylvisaker

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

Zur Beschreibung dynamischer zeitbezogener Phänomene verwenden wir die Begriffe sequentiell und gleichzeitig. Beispielsweise kann ein bestimmtes Ergebnis über eine bestimmte Sequenz von Aufgaben (z. B. ein Rezept) erhalten 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 somit übereinstimmen zum tatsächlichen Ergebnis einer bestimmten Aktion. Wenn viele Leute gleichzeitig sprechen, können gleichzeitige Gespräche unsere Sequenz stören, die Ergebnisse dieser Störung sind jedoch nicht im Voraus bekannt. Parallelität führt Unbestimmtheit ein .

Die serielle/parallele und sequentielle/gleichzeitige Charakterisierung sind orthogonal. Ein Beispiel dafür ist die digitale Kommunikation. In einem seriellen Adapter wird eine digitale Nachricht zeitlich (d. H. Sequentiell) entlang derselben Kommunikationsleitung (z. B. einer Leitung) verteilt. In einem Paralleladapter wird dieser auch auf parallele Kommunikationsleitungen (z. B. viele Drähte) aufgeteilt und dann auf der empfangenden Seite rekonstruiert. 

Lassen Sie uns ein Spiel mit 9 Kindern vorstellen. Wenn wir sie als Kette ablegen, zuerst eine Nachricht geben und sie am Ende erhalten, hätten wir eine serielle Kommunikation. Weitere Wörter bilden die Nachricht, bestehend aus einer Abfolge von Kommunikationseinheiten.

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

Dies ist ein sequentieller Prozess reproduziert auf einer seriellen Infrastruktur .

Lassen Sie uns nun die Kinder in Gruppen von 3 teilen. Wir unterteilen den Satz in drei Teile, geben den ersten der ersten Linie an die linke Linie, die zweite an das mittlere 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 reproduziert auf einer parallelen Infrastruktur (obwohl immer noch teilweise serialisiert).

In beiden Fällen, vorausgesetzt, es gibt eine perfekte Kommunikation zwischen den Kindern, ist das Ergebnis bestimmt im Voraus.

Wenn andere Personen gleichzeitig mit dem ersten Kind sprechen, haben wir gleichzeitige Prozesse . Wir wissen nicht, welcher Prozess von der Infrastruktur betrachtet wird, daher ist das Endergebnis nicht bestimmt im Voraus.

6
s1l3n0

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

Parallelität ist der Zeitpunkt, zu dem Parallelism auf einem single core CPU durch Verwendung von Scheduling-Algorithmen erreicht wird, die die CPU-Zeit (Zeitscheibe) teilen. Prozesse sind interleaved.

Einheiten:  

  • 1 oder viele Kerne in einer einzelnen CPU (so gut wie alle modernen Prozessoren) 
  • 1 oder viele CPUs auf einem Motherboard (alte Schulserver) 
  • 1 Anwendung ist 1 Programm (Chrome-Browser denken)
  • 1 Programm kann 1 oder viele Prozesse haben (denke, jeder Chrome-Browser-Tab ist ein Prozess)
  • 1 Prozess kann 1 oder viele Threads von 1 Programm haben (Chrome-Tab spielt Youtube-Video in 1 Thread, ein anderer Thread wurde für den Kommentarbereich erstellt, ein anderer für die Login-Informationen der Benutzer)
  • Daher kann ein Programm einen oder mehrere Ausführungsthreads haben
  • 1 Prozess ist thread(s)+allocated memory resources by OS(Heap, Register, Stack, Klasse Speicher)
6
nabster

Parallelität ist die verallgemeinerte Form der Parallelität. Ein paralleles Programm kann beispielsweise auch als parallel 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 vom Thread-Pool verwaltet werden).

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

  3. Distributed Computing ist ebenfalls ein verwandtes Thema und kann auch als Concurrent Computing bezeichnet werden, aber umgekehrt gilt nicht wie Parallelität.

Einzelheiten finden Sie in diesem Forschungspapier Konzepte der gleichzeitigen Programmierung

5
user4774371

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

Parallelism vs Concurrency Wenn zwei Threads parallel ausgeführt werden, laufen beide gleichzeitig. Wenn wir beispielsweise zwei Threads A und B haben, würde ihre parallele Ausführung folgendermaßen aussehen:

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

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

Wenn zwei Threads gleichzeitig ausgeführt werden, überschneidet sich deren Ausführung. Die Überlappung kann auf zwei Arten erfolgen: Entweder werden die Threads gleichzeitig ausgeführt (d. H. Parallel wie oben), oder ihre Ausführung wird auf dem Prozessor wie folgt verschachtelt:

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

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

Quelle: Noch eine Antwort hier

Hoffentlich hilft das.

4
HopeKing

Ich mag Paul Butcher Antwort auf diese Frage (er ist der Verfasser von sieben Nebenläufigkeitsmodellen in sieben Wochen):

Obwohl sie oft verwirrt sind, sind Parallelität und Parallelität verschiedene Dinge. Concurrency ist ein Aspekt der Problemdomäne —Ihre Der Code muss mehrere gleichzeitige (oder nahezu gleichzeitige) Ereignisse behandeln}. Parallelismus ist dagegen ein Aspekt der Lösung Domäne - Sie möchten indem Sie Ihr Programm durch die Verarbeitung von verschiedenen Abschnitten des Problems schneller ausführen.} Einige Ansätze sind anwendbar auf Parallelität, einige auf Parallelität und einige auf beide . Verstehen Sie, mit wem Sie konfrontiert sind, und wählen Sie das richtige Werkzeug für die Job.

4
dangom

Die gleichzeitige Programmierung betrifft Operationen, die sich scheinbar überschneiden, und betrifft in erster Linie die Komplexität, die sich aus einem nicht deterministischen Steuerungsfluss ergibt. Die mit gleichzeitigen Programmen verbundenen quantitativen Kosten sind typischerweise sowohl Durchsatz als auch Latenz. Gleichzeitige Programme sind oft IO gebunden, aber nicht immer, z. gleichzeitige Speicherbereiniger sind vollständig auf der CPU. Das pädagogische Beispiel eines gleichzeitigen Programms ist ein Web-Crawler. Dieses Programm initiiert Abfragen 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 Steuerungsfluss ist nicht deterministisch, da die Antworten nicht jedes Mal in derselben Reihenfolge empfangen werden, wenn das Programm ausgeführt wird. Diese Eigenschaft kann es sehr schwierig machen, gleichzeitig laufende Programme zu debuggen. Einige Anwendungen sind grundsätzlich gleichzeitig, z. Webserver müssen Clientverbindungen gleichzeitig handhaben. Erlang ist vielleicht die vielversprechendste kommende Sprache für das gleichzeitige Programmieren.

Parallele Programmierung bezieht sich auf Operationen, die sich überlappen, um den Durchsatz zu verbessern. Die Schwierigkeiten der gleichzeitigen Programmierung werden umgangen, indem der Steuerungsfluss deterministisch gemacht wird. In der Regel erzeugen Programme Gruppen von untergeordneten Aufgaben, die parallel ausgeführt werden, und die übergeordnete Aufgabe wird erst fortgesetzt, wenn alle Teilaufgaben abgeschlossen sind. Dies macht das Debuggen von Parallelprogrammen viel einfacher. Der schwierige Teil der parallelen Programmierung ist die Leistungsoptimierung in Bezug auf Fragen wie Granularität und Kommunikation. Letzteres ist im Zusammenhang mit Multicores immer noch ein Problem, da die Übertragung von Daten von einem Cache in einen anderen mit erheblichen Kosten verbunden ist. Dichte Matrix-Matrix-Multiplikation ist ein pädagogisches Beispiel für die parallele Programmierung. Sie kann effizient gelöst werden, indem der Divas-and-Conquer-Algorithmus von Straasen verwendet wird und die Unterprobleme parallel angegriffen werden. Cilk ist möglicherweise die vielversprechendste Sprache für die parallele Hochleistungsprogrammierung auf Computern mit gemeinsamem Speicher (einschließlich Multicores).

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

3
Jon Harrop

"Parallelität" ist, wenn mehrere Dinge in Bearbeitung sind.

"Parallelität" ist, wenn gleichzeitig gleichzeitige Dinge fortschreiten.


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

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

Beachten Sie jedoch, dass der Unterschied zwischen Parallelität und Parallelität oft eine Frage der Perspektive ist. Die obigen Beispiele sind aus der Perspektive der (beobachtbaren Auswirkungen) der Ausführung Ihres Codes nicht parallel. Aber auch innerhalb eines einzelnen Kerns gibt es Parallelität auf Befehlsebene. Es gibt Hardwarekomponenten, die parallel zur CPU arbeiten und dann die CPU unterbrechen. Die GPU könnte auf dem Bildschirm dargestellt werden, während Fensterprozedur oder der Event-Handler ausgeführt wird. Das DBMS könnte B-Trees für die nächste Abfrage durchlaufen, während Sie noch die Ergebnisse der vorherigen Abfrage abrufen. Der Browser kann ein Layout oder ein Netzwerk erstellen, während Ihre Promise.resolve() ausgeführt wird. Usw., etc ...

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

3

Concurrency kann gleichzeitige oder nicht ausgeführte Tasks beinhalten (sie können zwar in separaten Prozessoren/Kernen ausgeführt werden, sie können jedoch auch in "Ticks" ausgeführt werden). Was wichtig ist, ist, dass Parallelität sich immer auf bezieht, wenn ein Teil einer größeren Aufgabe ausgeführt wird. Im Grunde ist es ein Teil einiger Berechnungen. Sie müssen klug sein, was Sie gleichzeitig tun können und was nicht und wie synchronisiert werden soll.

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

3
kboom

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

Kurz gesagt, sowohl Parallelität als auch Parallelität sind Eigenschaften von computing.

Der Unterschied hier ist die Erklärung von Robert Harper :

Das erste was zu verstehen ist, dass Parallelismus nichts mit Parallelität zu tun hat. Parallelität betrifft die nichtdeterministische Zusammensetzung von Programmen (oder deren Komponenten). Parallelismus befasst sich mit asymptotischer Effizienz von Programmen mit deterministischem Verhalten. Bei Concurrency geht es darum, das Unverwaltbare zu managen: 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, auch wenn die Anzeige Aufmerksamkeit erfordert. Solche Situationen sind von Natur aus nicht deterministisch, aber wir setzen auch in einem deterministischen Setting pro forma non-determinism ein, indem wir vorgeben, dass Komponenten Ereignisse in einer willkürlichen Reihenfolge signalisieren und dass wir auf sie reagieren müssen, wenn sie entstehen. Nichtdeterministische Komposition ist eine starke Programmstrukturierungsidee. Bei der Parallelität geht es dagegen um Abhängigkeiten zwischen den Teilberechnungen einer deterministischen Berechnung. Das Ergebnis ist nicht zweifelhaft, aber es gibt viele Mittel, einige effizienter als andere. Wir möchten diese Möglichkeiten zu unserem Vorteil nutzen.

Sie können eine Art orthogonaler Eigenschaften in Programmen sein. Lesen Sie dieser Blogbeitrag für weitere Illustrationen. Und dieses diskutierte etwas mehr über die Unterschiede bei Komponenten in programming wie Threads.

Beachten Sie, dass Threading oder Multitasking allesamt Implementierungen der Datenverarbeitung sind, die konkreteren Zwecken dienen. Sie können sich auf Parallelität und Parallelität beziehen, jedoch nicht auf wesentliche Weise. Daher sind sie kaum gute Einträge, um die Erklärung zu beginnen.

Ein weiteres Highlight: (physikalisch) "Zeit" hat mit den hier besprochenen Eigenschaften fast nichts zu tun. Zeit ist nur ein Weg zur Durchführung der Messung, um die Bedeutung der Eigenschaften zu zeigen, jedoch weit von der Essenz entfernt. Denke zweimal die Rolle von "Zeit" in Zeitkomplexität - was mehr oder weniger ähnlich ist, sogar die Messung ist in diesem Fall oft bedeutender.

2
FrankHB

Parallelität: Wenn mehrere Threads ähnliche Aufgaben ausführen, sind sie in Bezug auf Daten und Ressourcen, die sie benötigen, unabhängig voneinander. Beispiel: Google Crawler kann Tausende von Threads erzeugen und jeder Thread kann seine Aufgabe unabhängig voneinander erledigen.

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

2
Sudip Bhandari

Die meiner Meinung nach einfachste und eleganteste Art, die beiden zu verstehen, ist 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 erstellen. Das zugrunde liegende Betriebssystem ist ein gleichzeitiges System und ermöglicht es diesen Tasks, ihre Ausführung zu verschachteln. Da Computer Anweisungen so schnell ausführen, sieht es so aus, als würden zwei Dinge gleichzeitig ausgeführt.

Parallelität ist, wenn solche Dinge wirklich parallel sind . 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 soll dann nicht alles parallel sein? Ein Grund dafür ist, dass Parallelität eine Methode zur Strukturierung von Programmen und eine Entwurfsentscheidung ist, um die Trennung von Bedenken zu erleichtern, wohingegen 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. Irgendwas muss zuerst und das andere dahinter gehen, sonst versaut man die Warteschlange. 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!

2
Daniel Soutar

Erklärung aus dieser Quelle war hilfreich für mich:

Parallelität bezieht sich darauf, wie eine Anwendung mehrere Aufgaben ausführt. arbeitet an. Eine Anwendung kann zu einem Zeitpunkt eine Aufgabe bearbeiten (sequentiell) oder mehrere Aufgaben gleichzeitig bearbeiten (gleichzeitig).

Parallelität dagegen hängt davon ab, wie eine Anwendung erledigt jede einzelne Aufgabe. Eine Anwendung kann die Aufgabe verarbeiten seriell von Anfang bis Ende oder teilen Sie die Aufgabe in Unteraufgaben auf, die kann parallel abgeschlossen werden.

Wie Sie sehen, kann eine Anwendung gleichzeitig, aber nicht parallel ausgeführt werden. Das bedeutet, dass mehr als eine Aufgabe gleichzeitig verarbeitet wird, jedoch Die Aufgaben werden nicht in Unteraufgaben aufgeteilt.

Eine Anwendung kann auch parallel, aber nicht gleichzeitig sein. Das heisst dass die Anwendung jeweils nur für eine Aufgabe funktioniert, und diese Aufgabe wird in Teilaufgaben aufgeteilt, die parallel bearbeitet werden können.

Darüber hinaus kann eine Anwendung weder gleichzeitig noch parallel ausgeführt werden . Dies bedeutet, dass es jeweils nur für eine Aufgabe funktioniert, und die Aufgabe ist nie in Unteraufgaben für die parallele Ausführung aufgeteilt.

Schließlich kann eine Anwendung auch gleichzeitig und parallel sein, in dass es gleichzeitig an mehreren Aufgaben arbeitet und auch bricht jede Aufgabe in Unteraufgaben für die parallele Ausführung ab. Einige der Die Vorteile von Parallelität und Parallelität können dabei verloren gehen Szenario, da die CPUs im Computer bereits einigermaßen ausgelastet sind entweder mit Parallelität oder Parallelität allein. Die Kombination kann zu .__ führen. nur ein kleiner Leistungsgewinn oder sogar ein Leistungsverlust.

1
Boolean_Type

Parallelität bedeutet einfach, dass mehr als eine Aufgabe ausgeführt wird (nicht parallel erforderlich). Zum Beispiel wird angenommen, dass wir zu jedem Zeitpunkt 3 Aufgaben haben: Es sind möglicherweise mehr als eine Aufgabe ausgeführt oder alle Aufgaben können gleichzeitig ausgeführt werden.

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

1
i_am_zero

Toll, 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 . A: Ich bin A . B: Ich bin B.

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

1
mannnnerd

Pikes Vorstellung von "Parallelität" ist eine absichtliche Entwurfs- und Implementierungsentscheidung. Ein gleichzeitig lauffähiges Programmdesign kann Verhaltens "Parallelität" aufweisen oder nicht; es hängt von der Laufzeitumgebung ab.

Sie möchten keine Parallelität, die von einem Programm gezeigt wird, das nicht auf Parallelität ausgelegt ist. :-) Aber in dem Maße, dass dies einen Nettogewinn für die relevanten Faktoren (Stromverbrauch, Leistung usw.) bedeutet, möchten Sie ein maximal paralleles Design, damit das Host-System seine Ausführung möglichst parallelisieren kann.

Pikes Programmiersprache Go veranschaulicht dies extrem: Seine Funktionen sind alle Threads, die gleichzeitig korrekt ausgeführt werden können, d. H. Der Aufruf 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.)

1
bgat

"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, entweder gemeinsam genutzten Speicher innerhalb eines Hosts oder verteilten Speicher auf verschiedenen Hosts, um gleichzeitig Code auszuführen. Ein Beispiel sind Pipelines von drei verschiedenen Aufgaben, die gleichzeitig ausgeführt werden. Task-Level-2 muss auf Einheiten warten, die von Task-Level-1 abgeschlossen wurden, und Task-Level-3 muss auf von abgeschlossene Arbeitseinheiten warten Task-Level-2. Ein weiteres Beispiel ist die Parallelität eines Produzenten mit einem Konsumenten. oder viele Produzenten und 1 Verbraucher; Leser und Schriftsteller; et al.

"Parallel" macht gleichzeitig die gleichen Dinge. Es ist gleichzeitig, aber es ist dasselbe Verhalten zur gleichen Zeit und meistens bei unterschiedlichen Daten. Matrixalgebra kann häufig parallelisiert werden, da dieselbe Operation wiederholt ausgeführt wird: Zum Beispiel können die Spaltensummen einer Matrix alle zur gleichen Zeit berechnet werden, wobei dasselbe Verhalten (Summe), aber für verschiedene Spalten verwendet wird. Es ist eine übliche Strategie, die Spalten auf die verfügbaren Prozessorkerne aufzuteilen (aufzuteilen), so dass nahezu dieselbe Menge an Arbeit (Anzahl von Spalten) vorhanden ist, die von jedem Prozessorkern bearbeitet wird. Eine andere Möglichkeit, die Arbeit aufzuteilen, ist ein Bag-of-Task, bei dem die Arbeiter, die ihre Arbeit beenden, zu einem Manager zurückkehren, der die Arbeit austeilt und dynamisch mehr Arbeit erhält, bis alles erledigt ist. Ticketing-Algorithmus ist ein anderer.

Nicht nur numerischer Code kann parallelisiert werden. Dateien können zu oft parallel verarbeitet werden. In einer Anwendung zur Verarbeitung natürlicher Sprache müssen Sie möglicherweise für jede Millionen 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 ist, wenn dasselbe Verhalten gleichzeitig ausgeführt wird. Gleichzeitig bedeutet gleichzeitig, aber nicht notwendigerweise dasselbe Verhalten. Parallel ist eine bestimmte Art von Parallelität, bei der dasselbe zur selben Zeit passiert.

Zu den Begriffen gehören beispielsweise atomare Anweisungen, kritische Abschnitte, gegenseitiger Ausschluss, Spin-Warten, Semaphore, Monitore, Barrieren, Message-Passing, Map-Reduction, Herzschlag, Ring, Ticketing-Algorithmen, Threads, MPI, OpenMP.

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

0