70 Stimmen

Threading vs. Parallelität, wie unterscheiden sie sich?

Was ist der Unterschied zwischen Threading und Parallelität?

Welcher hat einen Vorteil gegenüber dem anderen?

10 Stimmen

Was ist der Unterschied zwischen Autos und Autofahren? Threading ist die Verwendung von Threads, Parallelität ist, wenn etwas parallel läuft. Die häufigste Art, Dinge parallel laufen zu lassen, ist die Verwendung von Threads.

71voto

RichardOD Punkte 28349

Daniel Moth (ein ehemaliger Mitarbeiter von mir) - Threading/Gleichzeitigkeit vs. Parallelität Artikel erklärt das alles.

Zitiert:

Um die Vorteile mehrerer Kerne in unserer Software zu nutzen, müssen letztlich müssen Threads verwendet werden. Aufgrund dieser Tatsache tappen manche Entwickler in die die Falle, Multithreading mit Parallelität gleichzusetzen. Das ist nicht Das ist nicht korrekt... Man kann Multithreading auf einer Maschine mit einem Kern haben, aber Parallelität ist nur auf einem Mehrkern-Rechner möglich.

Der Schnelltest: Wenn Sie auf einem Single-Core-Rechner Threads verwenden und dies für Ihr Szenario absolut sinnvoll ist, dann betreiben Sie keine "Parallelität", sondern nur Multithreading.

13 Stimmen

Guter Artikel! Es könnte sich lohnen, hier eine kurze Zusammenfassung oder ein Zitat einzufügen, um sich gegen Linkfäule abzusichern.

0 Stimmen

@ChrisNolet web.archive.org ist gut für Link Rot. Zitate und Zusammenfassungen sind aber auch aus anderen Gründen gut.

28voto

Es gibt zwei verschiedene Arten der Gleichzeitigkeit:

  1. Einfädeln: Die CPU schaltet sehr schnell zwischen verschiedenen Threads um, was den Anschein von Gleichzeitigkeit erweckt. Keypoint: zu einem bestimmten Zeitpunkt nur ein Thread läuft. Wenn ein Thread läuft, werden andere blockiert. Sie werden sich vielleicht fragen, wie das sinnvoller sein kann, als einfach prozedural zu arbeiten. Nun, stellen Sie sich das Ganze wie eine Prioritäts-Warteschlange vor. Threads können geplant werden. Der CPU-Scheduler kann jedem Thread eine bestimmte Zeit zugestehen, ihn anhalten, Daten an andere Threads weitergeben und ihnen dann unterschiedliche Prioritäten zuweisen, damit sie zu einem späteren Zeitpunkt ausgeführt werden. Das ist ein Muss für nicht sofort laufende Prozesse, die sich gegenseitig beeinflussen . Sie wird in Servern ausgiebig genutzt: Tausende von Kunden können gleichzeitig etwas anfordern und bekommen dann zu einem späteren Zeitpunkt, was sie angefordert haben (bei einem verfahrenstechnischen Verfahren kann immer nur ein Kunde bedient werden). Philosophie: verschiedene Dinge gemeinsam tun. Die Gesamtzeit wird dadurch nicht verkürzt (für den Server ist dies irrelevant, da sich ein Client nicht um die Gesamtzeit der Anfragen anderer Clients kümmert).
  2. Parallelität: Threads laufen parallel, normalerweise in verschiedenen CPU-Kernen, echte Gleichzeitigkeit. Keypoint: mehrere Threads zu einem bestimmten Zeitpunkt ausgeführt werden. Sie ist nützlich für umfangreiche Berechnungen, superlang laufende Prozesse . Das Gleiche gilt für eine Flotte von Einkern-Maschinen, bei denen die Daten in Abschnitte aufgeteilt werden, die jede Maschine zu berechnen hat, und die am Ende zusammengeführt werden. Verschiedene Maschinen/Kerne können nur schwer miteinander interagieren. Philosophie: eine Sache in kürzerer Zeit erledigen.

Wie Sie sehen können, lösen sie völlig unterschiedliche Probleme.

15voto

Martin P. Hellwig Punkte 672

Unter Threading versteht man in der Regel die gleichzeitige Arbeit mehrerer Prozesse auf einer einzigen CPU (eigentlich nicht, wie Sie denken, aber sie wechseln sehr schnell zwischen ihnen).

Parallelität bedeutet, dass mehrere Prozesse gleichzeitig auf mehreren CPUs arbeiten.

Beide haben ihre Vor- und Nachteile, die stark von dem von Ihrem Betriebssystem verwendeten Scheduler abhängen. Normalerweise sind die Rechenkosten für die Erstellung eines Threads viel geringer als für die Erstellung eines Prozesses auf einer anderen CPU. Wenn dieser Prozess jedoch mit einem anderen Prozess auf einer anderen CPU kommunizieren muss, müssen Sie das IPC-Problem (Interprozesskommunikation) lösen, das einen solchen Overhead darstellen kann, dass es besser ist, einen Thread auf derselben CPU zu verwenden.

Die meisten Betriebssysteme kennen mehrere CPUs/Kerne und können sie nutzen, aber das macht den Scheduler in der Regel recht komplex.

Wenn Sie in einer Sprache programmieren, die eine VM (virtuelle Maschine) verwendet, sollten Sie sich darüber im Klaren sein, dass diese ihren eigenen Scheduler implementieren müssen (wenn überhaupt). Python zum Beispiel verwendet eine GIL, die im Wesentlichen besagt, dass alles, was auf dieser VM läuft, immer auf der gleichen CPU läuft. Einige Betriebssysteme sind jedoch in der Lage, einen schweren Prozess auf eine andere CPU zu verlagern, die gerade nicht so stark ausgelastet ist, was natürlich bedeutet, dass der gesamte Prozess währenddessen angehalten werden muss.

Einige Betriebssysteme wie DragonFlyBSD verfolgen einen ganz anderen Ansatz für das Scheduling als der derzeitige Standardansatz.

Ich denke, diese Antwort gibt Ihnen genügend Stichworte, um nach weiteren Informationen zu suchen :-)

8voto

jldugger Punkte 2169

Parallelität ist eine allgemeine Technik, bei der mehr als ein Befehlsfluss zur Ausführung einer Berechnung verwendet wird. Der entscheidende Aspekt aller parallelen Techniken ist die Kommunikation zwischen den Flüssen, um eine endgültige Antwort zu erhalten.

Threading ist eine spezielle Implementierung der Parallelität. Jeder Anweisungsfluss erhält einen eigenen Stack, um lokale Variablen und Funktionsaufrufe festzuhalten, und kommuniziert mit den anderen Flüssen implizit über einen gemeinsamen Speicher.

Ein Beispiel könnte sein, dass ein Thread einfach Festplattenanforderungen in eine Warteschlange stellt und sie an einen Worker-Thread weitergibt, wodurch Festplatten- und CPU-Anforderungen effektiv parallelisiert werden. Die traditionelle UNIX-Pipes-Methode besteht darin, diese in zwei vollständige Programme aufzuteilen, z. B. "cat" und grep im Befehl:

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

Threading könnte die Kommunikationskosten für das Kopieren von Festplatten-E/A vom cat-Prozess zum grep-Prozess reduzieren.

6voto

PaulJWilliams Punkte 18533

Threading ist eine Technologie, Parallelität ist ein Paradigma, das mit Hilfe von Threading implementiert werden kann (aber genauso gut mit einzelnen Threads auf mehreren Prozessoren durchgeführt werden könnte)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X