Zu Multi-Thread oder nicht zu Multi-Thread!

8

Das ist die Frage!

Wann ist eine Multi-Threading-Anwendung ein Muss und was ist bei Multithreading generell zu beachten?

Es würde sehr geschätzt werden, wenn ein Beispiel zusammen mit der Erklärung veröffentlicht wird.

Danke.

PS. Ich habe versucht, alle möglichen Fragen vor dem Posten zu prüfen, wenn diese Frage einfach ein anderes Duplikat ist, schließe es bitte.

    
SimpleButPerfect 19.01.2011, 16:28
quelle

5 Antworten

12

In Threading in C # von Joseph Albahai hat einen schönen Abschnitt mit dem Titel Threading verwendet und missbraucht. Es listet fünf häufige Anwendungsfälle für das Threading auf.

Wenn bis

Pflege einer reaktionsfähigen Benutzeroberfläche

  

Durch den zeitaufwendigen Betrieb   Aufgaben auf einem parallelen "Worker" -Thread,   Der Haupt-UI-Thread kann weiter ausgeführt werden   Verarbeitung von Tastatur- und Mausereignissen.

Eine ansonsten blockierte CPU effizient nutzen

  

Multithreading ist nützlich, wenn ein Thread   wartet auf eine Antwort von einem anderen   Computer oder Hardware. Während   Ein Thread ist während der Ausführung blockiert   Die Aufgabe können andere Threads übernehmen   Vorteil des sonst unbelasteten   Computer.

Parallele Programmierung

  

Code, der intensiv ist   Berechnungen können schneller ausgeführt werden   Multicore- oder Multiprozessor-Computer   wenn die Arbeitslast geteilt wird   mehrere Threads in einem   Strategie "Teilen und Herrschen"

Spekulative Ausführung

  

Auf Multicore-Rechnern können Sie   manchmal die Leistung verbessern durch   etwas vorhersagen, das es brauchen könnte   getan werden, und dann weitermachen   von Zeit. LINQPad verwendet diese Technik   um die Schaffung von neuen zu beschleunigen   Abfragen. Eine Variation besteht darin, a auszuführen   Anzahl der verschiedenen Algorithmen in   parallel, dass alle die gleiche Aufgabe lösen.   Welches auch immer zuerst beendet wird   "Gewinnt" - das ist effektiv, wenn Sie   kann nicht voraus wissen, was   Algorithmus wird am schnellsten ausgeführt.

Zulassen, dass Anforderungen gleichzeitig verarbeitet werden

  

Auf einem Server können Client-Anfragen   gleichzeitig ankommen und so sein müssen   parallel behandelt (der .NET   Framework erstellt hierfür Threads   automatisch, wenn Sie ASP.NET, WCF,   Webdienste oder Remoting). Das kann   auch auf einem Client nützlich sein (z.B.   Umgang mit Peer-to-Peer-Networking-oder   sogar mehrere Anfragen vom Benutzer).

Wenn nicht

Er fährt damit fort, den Leser zu warnen

  

Mit Technologien wie ASP.NET und   WCF, Sie können sich dessen nicht bewusst sein   Multithreading nimmt sogar   Ort - es sei denn, Sie greifen auf freigegebene Daten zu   (vielleicht über statische Felder) ohne   entsprechende Verriegelung, laufender Stromausfall   Fadensicherheit.

     

Threads kommen auch mit   Zeichenketten angebracht. Das größte ist das   Multithreading kann zunehmen   Komplexität. Viele Threads haben   erzeugt an sich nicht viel   Komplexität; Es ist die Interaktion   zwischen Threads (normalerweise über   Daten) das tut. Dies gilt, ob   oder nicht die Interaktion ist beabsichtigt,   und kann lange Entwicklungszyklen verursachen   und eine anhaltende Anfälligkeit für   intermittierende und nicht reproduzierbare Fehler.   Aus diesem Grund lohnt es sich, zu behalten   Interaktion auf ein Minimum und zu   bleibe bei einfachen und bewährten Designs   woimmer möglich. Dieser Artikel   konzentriert sich hauptsächlich auf den Umgang mit Just   diese Komplexitäten; entferne das   Interaktion und es gibt viel weniger zu   sagen!

     

Eine gute Strategie ist es   kapseln Multithreading-Logik ein   wiederverwendbare Klassen, die sein können   unabhängig untersucht und getestet.   Das Framework selbst bietet viele   Übergeordnete Threading-Konstrukte,   was wir später behandeln.

     

Threading auch   verursacht eine Ressource und CPU-Kosten in   Planen und Wechseln von Threads (wenn   Es gibt mehr aktive Threads als   CPU-Kerne) - und es gibt auch eine   Erstellungs- / Abbruchkosten.   Multithreading wird nicht immer schneller   Ihre Anwendung kann sogar langsamer werden   es herunter, wenn übermäßig verwendet oder   unpassend. Zum Beispiel wann   Es kann sich um schwerwiegende Festplatten-E / A handeln   schneller, ein paar Arbeiter zu haben   Threads führen Tasks nacheinander aus   Lassen Sie 10 Threads gleichzeitig ausführen.   (In Signaling with Wait und Pulse, wir   beschreiben, wie man a   Producer / Consumer Queue, welche   bietet genau diese Funktionalität.)

    
Conrad Frix 19.01.2011, 17:14
quelle
3

Multi-Threading hat viele, viele Aspekte zum Nachdenken. Ich empfehle ein Tutorial: Die Lektion: Concurrency aus dem Java-Tutorial . Dann musst du über die Leistung nachdenken, aber das ist eine besondere Fähigkeit.

Sie werden über die anderen Probleme lernen, wenn Sie ihnen gegenüberstehen.

    
Daniel 19.01.2011 16:38
quelle
2

Da alle CPUs der neuen Generation eine Multicore-Architektur haben, empfehle ich wirklich, IMMER Multi-Thread-Anwendungen zu entwickeln, um die volle Leistung Ihrer CPU zu nutzen.

Egal welche Sprache Sie verwenden, es ist nicht wichtig. Wenn Sie sich einer Multithread-Anwendung nähern, müssen Sie allgemein davon ausgehen, dass die Software als zwei oder mehr Software mit einem gemeinsamen Speicher zwischen ihm und Ihnen gilt.

Versuchen Sie in der ersten Instanz herauszufinden, welcher Teil Ihrer Software parallelisiert werden kann.

Wenn Sie zum Beispiel eine Software haben, die eine Menge Daten erzeugt und Sie sie dann auf Festplatte schreiben müssen, können Sie den Speichererzeuger und den Schreiber des Speichers in zwei Threads unterteilen.

>

In dieser Situation haben Sie zum Beispiel den ersten Thread, der mit voller CPU-Geschwindigkeit Daten erzeugt, wie er erstellt werden kann, und den anderen Thread, der die Daten auf der Festplatte mit voller Festplattengeschwindigkeit schreibt.

In dieser Situation haben Sie die CPU und die Aufgabe, die Daten auf Festplatte zu schreiben, parallelisiert und Sie haben am Ende eine schnellere Anwendung. - Der erste Thread wird zum Beispiel am ersten Kern zugewiesen. - Der zweite Thread wird am zweiten Kern zugewiesen.

Da die Festplatte langsamer ist als die CPU, haben Sie nicht den Engpass der Festplatte in Ihrem Producer-Thread.

meine 2 Cent.

google dieses Schlüsselwort: Producer Consumer-Algorithmen

    
Roberto Martelloni 19.01.2011 16:59
quelle
1
  • Multi Threading ist ein Konzept, bei dem wir einen Prozess in viele teilen unabhängige Unterprozesse (genannt ein Thread), aber sie können davon abhängen auf einer einzigen Ressource wie Daten-Ressource in diesem Fall müssen sie greifen Sie ausschließlich darauf zu.
  • Threads werden benötigt, wenn der Prozessor mit einigen beschäftigt sein soll Unterprozess (Thread), während andere Teilprozesse auf IO oder andere Ressourcen. Threads können jedoch nur parallel zur CPU laufen ist Multi-Core, ansonsten arbeiten sie in der Regel Time-Sharing Konzept (ein Teilprozess wird für einige Zeit ausgeführt (Zeitquantum) und dann andere).

Zum Beispiel können wir Multi-Threading durch den Prozess der Abrechnung am Abrechnungsschalter eines Shops oder eines MALLs verstehen. Daher ist nur ein Zähler ein Prozess mit nur einem Thread und Multi-Counter sind ein Prozess mit mehreren Threads. Bei Multi-Threading wird der gesamte Prozess der Abrechnung in viele Unterprozesse unterteilt, wobei viele Abrechnungszähler (mehrere Threads) darauf abzielen, den Abrechnungsjob auszuführen. p>

Für die Implementierung von Threads haben wir folgendes Beispiel:

%Vor%

Nun muss diese taskManager-Klasse geerbt werden und ihre abstrakten Funktionen müssen definiert werden.

zum Beispiel:

%Vor%

}

Das Hauptprogramm;

%Vor%

HOFFNUNG DIESER POST IST SEHR VIEL NÜTZLICH

    
Kalpit S. 28.10.2013 12:56
quelle
0

Ich benutze Multithreading, wenn ich viele verschiedene Arten von Aufgaben und Prioritäten in einer Anwendung habe.

Ein Beispiel könnte sein, dass Sie Informationen in einer Datenbank protokollieren müssen. Das Schreiben in die Datenbank dauert jedoch zu lange und hält die App auf. Wenn Sie die Protokollierung in einen anderen Thread einfügen, dann kann dieser problemlos dort ablaufen und Abfragen ausführen, ohne sich mit dem Rest der Anwendung zu beschäftigen.

    
Rich 19.01.2011 16:41
quelle

Tags und Links