Da Multi-Core-Prozessoren immer beliebter werden, denke ich, es wäre klug für mich, mit dem Schreiben von Code vertraut zu machen. Ich bin ein .NET-Entwickler und bin mir nicht sicher, wo ich anfangen soll (ernsthaft, ich habe keine Ahnung wo ich anfangen soll). Irgendwelche Vorschläge?Wie schreibe ich .NET-Anwendungen, die Multi-Core-Prozessoren verwenden
Antwort
Multi-Core-Programmierung ist im Wesentlichen Multi-Thread-Programmierung. Solange Ihre Anwendung Multi-Threading ist, wird das Betriebssystem bestimmen, auf welchem Kern welcher Thread ausgeführt werden soll.
Also, Ihre eigentliche Frage sollte sein, welche Art von Anwendungen würde von Multithreading profitieren? Stellen Sie sich eine solche Anwendung vor und instanziieren Sie mehrere Threads, um gleiche Teile des Problems zu lösen.
Dies könnte eine good starting place machen.
Der beste Weg, um zu beginnen ist, greifen Sie die neuesten CTP der parallelen Erweiterungen Rahmen und starten Sie durch ihre Beispielcode pflügen.
- Parallel-Team Seite: http://msdn.microsoft.com/en-us/concurrency/default.aspx
- Neueste CTP-Mitteilung: http://blogs.msdn.com/somasegar/archive/2008/06/02/june-2008-ctp-parallel-extensions-to-the-net-fx.aspx
Vielleicht sind parallele Erweiterungen ein bisschen übertrieben. Sollte man nicht mit manuellen Threading anfangen, um alle Probleme zu verstehen und Grundlagen zu lernen? –
Ich bin geneigt zu denken, dass das Lernen durch diese besser ist (daher meine Antwort, um nach Informationen auf .net 4.0 zu suchen). Im Grunde genommen verbringen Sie weniger Zeit damit, wie Sie alles miteinander verbinden, und mehr Zeit dafür, wie Parallelität die Logik beeinflusst.Und wenn keine Quelle verfügbar ist, können Sie mit Reflektor spähen :) – eglasius
Geben Sie für Informationen über die .net 4.0. Es wird verschiedene Konstrukte dafür hinzufügen.
Lesen Sie das asynchrone Programmiermodell, das .NET verwendet. Studieren Sie das BeginXXX- und das EnxXXX-Paradigma, das Delegaten die Ausführung im Threadpool ermöglicht.
Die Stream-Klassen haben alle BeingXXX, EndXXX-Methoden (zB BeginRead, EndRead), mit denen Sie asynchrone IOs ausführen können. Wenn Sie an etwas arbeiten, das stark auf IO basiert, sollten Sie diese Methoden verwenden, um die Parallelität zu erhöhen.
"Lesen Sie weiter ..." Ich nehme an, Sie haben ein Verständnis für diese Paradigmen. Hast du Material, das ich vorschlagen kann? DANKE! –
Werfen Sie einen Blick auf http://msdn.microsoft.com/en-us/magazine/cc163467.aspx Alles von Jeffrey Richter zu diesem Thema ist eine gute Lektüre. Suchen Sie auch Artikel von Joe Duffy, wie http://msdn.microsoft.com/en-us/magazine/cc163467.aspx Er hat auch ein gutes Buch über Multithreading. – Sean
Ich empfehle Bücher nicht mehr sehr oft, aber Joe Duffy Concurrent Programming on Windows ist einfach unersetzlich.
Durch einfaches Trennen Ihres Projekts in verschiedene Threads, die auf eine bestimmte Funktion spezialisiert sind, können Sie mehrere Cores nutzen. Das OS übernimmt die Planung der verschiedenen Threads für den am meisten verfügbaren Prozessorkern.
Wie JaredPar sagte, die parallelen Erweiterungen sind ziemlich gut. Ich habe ein wenig mit ihnen gespielt und sie sind einfach zu bedienen und fügen Leistung hinzu.
Die Konstrukte, die ich sehr mochte, waren Parallel.ForEach() und PLinq.
Parallel.ForEach ähnelt der ForEach-Funktion (Delegat), die Sie in DotNet 2.0-Sammlungen haben. Es nimmt einen Aktionsdelegaten und führt es parallel aus.
Mit Plinq können Sie jede normale Linq-Abfrage parallel ausführen, indem Sie .AsParallel() am Ende der Abfrage hinzufügen.
Schauen Sie sich die Links Jared für weitere Informationen veröffentlicht.
Um zu beginnen, denke ich, dass ich etwas schreiben werde, das vier Threads abspinnt (ich habe einen Quad-Core-Rechner). Jeder Thread führt eine separate Konsolenanwendung aus, die einige Minuten intensiv Berechnungen durchführt (um die CPU-Auslastung zu erhöhen). Ich sollte in diesem Fall 100% CPU-Auslastung erwarten, richtig? –
Das sollte ziemlich genau sein. –
Vielen Dank für die Hilfe! Ich verstehe das jetzt sehr gut. Es macht Sinn, dass nur bestimmte Arten von Anwendungen 4 Kerne als leicht notwendig erachten. –