Was ist der Unterschied zwischen Threading und Parallelität?
Welcher hat einen Vorteil gegenüber dem anderen?
Was ist der Unterschied zwischen Threading und Parallelität?
Welcher hat einen Vorteil gegenüber dem anderen?
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.
Guter Artikel! Es könnte sich lohnen, hier eine kurze Zusammenfassung oder ein Zitat einzufügen, um sich gegen Linkfäule abzusichern.
@ChrisNolet web.archive.org ist gut für Link Rot. Zitate und Zusammenfassungen sind aber auch aus anderen Gründen gut.
Es gibt zwei verschiedene Arten der Gleichzeitigkeit:
Wie Sie sehen können, lösen sie völlig unterschiedliche Probleme.
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 :-)
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.
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.
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.