2010-12-26 14 views
12

Ich untersuche gerade Task Parallel Library und ich habe irgendwo gelesen, dass TPL tatsächlich Thread-Pool-Mechanismus von CLR-Level verwendet. Ich konnte keinen Artikel finden, der diese Information bestätigt. Ich weiß, TPL hat Task-Queues für jeden Thread und verwendet einen speziellen Work-Stealing-Algorithmus zum Balancieren. Soweit ich weiß, erstellt es einen Thread für jeden Prozessor. Threadpools begannen seit .NET 4, Aufgabenobjekte von TPL zu verwenden.(Wie) Verwendet TPL (CLR) Thread Pool?

Ich kann nicht verstehen, wie TPL den Threadpool verwendet. Thread-Pool-Musterstatus, die Arbeitselemente werden in die Warteschlange gestellt und die freien Threads im Thread-Pool nehmen einen aus dieser Warteschlange. TPL speichert jedoch die Items (Tasks) in Warteschlangen von Threads und Arbeits-Stealing-Arbeiten bei Bedarf ... Also ganz anders. Wo ist mein Fehler?

zusätzliche Frage: Da dies meine erste Stack Overflow Frage war, bin ich nicht sicher, ob es geeignet war. Ist es?

+1

(Es ist übrigens absolut OK als SO Frage.) –

Antwort

9

In TPL ist eine TaskScheduler dafür zuständig, die Aufgaben zur Ausführung in die Warteschlange zu stellen. Der Default Scheduler wird den Thread-Pool verwenden - aber ich glaube, es ist die neue Thread-Pool-Implementierung, die tatsächlich die Arbeit stiehlt Cleverness.

Daniel Moth hat eine blog post mit einigen weiteren Details, die Sie nützlich finden können.

+1

Der Artikel ist sehr nützlich, danke. Ich verstehe den Grund für meine Verwirrung: Task Logik und Work-Stealing wurden eigentlich als Teil von TPL entworfen. Aber die Implementierung ist im Thread-Pool. Dieser entwickelte Thread-Pool zu einem "Pool mit Work-Stealing". Danke noch einmal. – eks

Verwandte Themen