Parallele Codierung Vs Multithreading (auf Single-CPU)

8

können wir austauschbar "Parallele Codierung" und "Multithreading-Codierung" auf Single-CPU?

Ich bin nicht viel Erfahrung in beiden, aber ich möchte meinen Kodierungsstil zu einem der oben genannten verschieben.

Wie ich jetzt einige Tage gefunden habe, sind viele Single-Thred-Anwendungen veraltet, was wäre besser für zukünftige Software-Industrie als Karriere-Perspektive?

    
S.Kumar 02.07.2009, 08:06
quelle

6 Antworten

12

Es gibt definitiv Überschneidungen zwischen Multithreading und parallelem Codieren / Rechnen, mit den Hauptunterschieden in der Zielverarbeitungsarchitektur.

Multithreading wurde verwendet, um die Vorteile von Concurrency in einem einzigen Prozess auf einer einzelnen CPU mit gemeinsam genutztem Speicher zu nutzen. Das Ausführen der gleichen Programme auf einer Maschine mit mehreren CPUs kann zu einer erheblichen Beschleunigung führen, ist aber oft ein Bonus und nicht beabsichtigt (bis vor kurzem). Viele Betriebssysteme verfügen über Threading-Modelle (z. B. pthreads ), die zwar von mehreren CPUs profitieren, aber nicht benötigen.

Multiprozessing ist das Standardmodell für parallele -Programmierung, das auf mehrere CPUs abzielt, von frühen SMP-Maschinen mit vielen CPUs auf einer großen Maschine bis hin zu Cluster-Computing auf vielen Maschinen jetzt zurück zu vielen CPUs / Kernen auf einem einzelnen Computer. MPI ist ein Standard, der über viele verschiedene Architekturen hinweg funktionieren kann.

Natürlich kann man ein paralleles Design unter Verwendung von Threads mit Sprachrahmen wie OpenMP programmieren. Ich habe von Multikomponenten GUIs / Anwendungen gehört, die auf separate Verarbeitung angewiesen sind, die theoretisch überall ausgeführt werden könnte. In der Praxis gibt es mehr von ersterem als von letzterem.

Wahrscheinlich ist der Hauptunterschied, wenn das Programm auf mehreren Rechnern läuft, wo Multithreading nicht praktikabel ist und bestehende Anwendungen, die Speicher teilen, nicht funktionieren.

    
bubaker 02.07.2009 09:02
quelle
2

Die Frage ist etwas verwirrend, da Sie parallele Operationen in mehreren Threads durchführen können, aber alle Multithread-Anwendungen verwenden kein paralleles Computing. In parallelem Code haben Sie normalerweise viele "Worker", die eine Reihe von Daten konsumieren, um Ergebnisse asynchron zurückzugeben. Aber Multithread wird in einem breiteren Bereich verwendet, wie GUI, Blockierung von E / A und Vernetzung.

Wenn Sie auf einer einzelnen oder mehreren CPUs arbeiten, ändert sich nicht viel, da die Verwaltung davon abhängt, wie Ihr Betriebssystem mit Threads und Prozessen umgehen kann.

Multithreading wird überall nützlich sein, Parallelität ist kein alltägliches Computing-Paradigma, also könnte es eine "Nische" in einer Karriere-Perspektive sein.

    
user84491 02.07.2009 08:18
quelle
2

Einige Demos, die ich in .NET 4.0 gesehen habe, scheinen die parallelen Codeänderungen leichter zu machen als Threads. Es gibt eine neue Syntax für "For Loops" und andere Dinge, die die parallele Verarbeitung unterstützen. Es gibt also einen Unterschied.

Ich denke, in der Zukunft werden Sie beides tun, aber ich denke, dass die parallele Unterstützung besser und einfacher sein wird. Sie benötigen immer noch Threads für Hintergrundoperationen und andere Dinge.

    
eschneider 02.07.2009 08:20
quelle
1

Tatsache ist, dass Sie auf einer einzelnen CPU keine "echte" Parallelität erreichen können. Es gibt mehrere Bibliotheken (wie C's MPI), die ein wenig auf diesem Gebiet helfen. Aber das Konzept des Paralellismus wird nicht von Entwicklern verwendet, die an populären Lösungen arbeiten.

Multithreading ist heutzutage üblich, dank der Einführung von mehreren Kernen auf einer einzigen CPU, es ist einfach und fast transparent in jeder Sprache zu implementieren dank Thread-Bibliotheken und Thread-Safe-Typen, Methoden, Klassen und so weiter. Auf diese Weise können Sie Paralellismus simulieren.

Wie auch immer, wenn Sie damit beginnen, beginnen Sie mit dem Lesen von Nebenläufigkeits- und Threading-Themen. Und natürlich funktionieren Threads + Parallelität gut zusammen.

    
Rigo Vides 02.07.2009 08:37
quelle
0

Ich bin mir nicht sicher, was Ihrer Meinung nach "Paralleles Codieren" ist, sondern paralleles Codieren, wie ich es verstehe, das Erzeugen von Code, der parallel von der CPU ausgeführt wird, und daher Multithread-Code in diese Beschreibung fällt.

>

Auf diese Art und Weise können Sie sie natürlich austauschbar verwenden (so wie Sie ineinander fallen).

Trotzdem schlage ich vor, Sie nehmen es langsam und fangen an, von den Grundlagen zu lernen. Verstehen, warum Multithreading wichtig wird, was ist der Unterschied zwischen Prozessen, Threads und Fasern, wie synchronisiert man sie und so weiter.

Denken Sie daran, dass paralleles Codieren, wie Sie es nennen, ziemlich komplex ist, speziell im Vergleich zur sequentiellen Codierung, seien Sie also vorbereitet. Beeil dich auch nicht. Nur weil du 3 Threads anstelle von einem verwendest, wird dein Programm nicht schneller, sondern sogar langsamer. Sie müssen das Wie und Warum verstehen. Nicht jedes Ding kann parallel gemacht werden und nicht alles kann, sollte.

    
Jorge Córdoba 02.07.2009 08:16
quelle
0

in einfacher Sprache Multithreading ist in der CPu selbst verfügbar und Parallele Programmierung ist eine explizite Aufgabe, entweder vom Compiler oder von meinen Konstrukten, die von den Programmierern "#pragma"

geschrieben wurden     
Harshit Mehta 17.08.2013 08:53
quelle