2010-12-29 14 views
1

Könnte mir jemand aufklären, wie diese Dinge korrelieren:TPL Aufgaben, Themen, etc

Aufgabe
Thema
Thread Thread
Paraller.For/ForEach/Invoke

D.h. Wenn ich eine Aufgabe erstelle und sie ausführe, wo bekomme ich einen Thread zur Ausführung? Und wenn ich Parallele anrufe. * Was passiert wirklich unter den Deckeln?

Alle Links zu Artikeln, Blogposts usw. sind ebenfalls sehr willkommen!

+0

Ausgezeichnetes Buch , Concurrent Programming unter Windows, gut gelesen, zumindest die Hälfte habe ich bisher gemacht ;-) –

Antwort

1

Der ideale Zustand eines Systems ist es, 1 aktiv laufenden Thread pro CPU-Kern zu haben. Indem die Arbeit in allgemeineren Begriffen von "Aufgaben" definiert wird, kann die TPL dynamisch entscheiden, wie viele Threads zu verwenden sind und welche Aufgaben jeweils ausgeführt werden sollen, um diesem idealen Zustand am nächsten zu kommen. Dies sind Entscheidungen, die fast immer am besten dynamisch zur Laufzeit getroffen werden, da Sie beim Schreiben des Codes nicht sicher wissen können, wie viele CPU-Kerne für Ihre Anwendung verfügbar sind, wie beschäftigt sie mit anderen Arbeiten usw.

0

Thread: ist ein echter OS-Thread, hat Handle und ID.

ThreadPool: ist eine Sammlung von bereits erstellten Betriebssystem-Threads. Diese Threads werden von der Laufzeit verwaltet/verwaltet, und Ihr Code darf sie nur für eine Weile "ausleihen". Sie können nur Kurzarbeit in diesen Threads ausführen und Sie können keinen Thread-Status ändern oder löschen diese Fäden.

beste Vermutungen auf diesen beide:

Aufgabe: könnte auf einem bereits erstellten Thread im Thread-Pool laufen lassen, oder vielleicht als Teil des User-Mode-Scheduling fahren wird, ist das alles je nachdem, was die Laufzeit denkt, ist am besten. Noch eine Vermutung: Bei TPL basiert die Benutzermodus-Planung NICHT auf OS Fibers, sondern ist ihre eigene vollständige (und funktionierende) Implementierung.

Parallel.For: eigentlich, keine Ahnung, wie dies implementiert ist. Die Laufzeitumgebung erstellt möglicherweise neue Threads für die parallelen Bits oder verwendet die Threads des Thread-Pools sehr wahrscheinlich für die Parallelität.