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.
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.
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).
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.)
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.
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
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
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.
Tags und Links multithreading