2009-03-03 8 views

Antwort

12

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.

+0

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? –

+0

Das sollte ziemlich genau sein. –

+0

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. –

3

Der beste Weg, um zu beginnen ist, greifen Sie die neuesten CTP der parallelen Erweiterungen Rahmen und starten Sie durch ihre Beispielcode pflügen.

+0

Vielleicht sind parallele Erweiterungen ein bisschen übertrieben. Sollte man nicht mit manuellen Threading anfangen, um alle Probleme zu verstehen und Grundlagen zu lernen? –

+0

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

1

Geben Sie für Informationen über die .net 4.0. Es wird verschiedene Konstrukte dafür hinzufügen.

2

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.

+0

"Lesen Sie weiter ..." Ich nehme an, Sie haben ein Verständnis für diese Paradigmen. Hast du Material, das ich vorschlagen kann? DANKE! –

+0

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

0

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.

1

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.