| 

.NET C# Java Javascript Exception

2
Hallo,

nachdem ich seit einiger Zeit mit Threads "herumspiele", hat mich dann doch eine Frage mal beschäftigt: wenn ich extreme Langläufer als Threads habe (z. B. 10 Threads, die jeweils mehrere Stunden laufen), was ist da Eurer Erfahrung nach effektiver: 10 einzelne Threads erstellen oder im Threadpool starten? Im Moment mache ich das über Threads (in einem Array), da kann ich schön über .IsAlive zählen, wie viele Kinderchen denn noch wursteln.

Wie ist Eure Meinung?
10.09.2013
muffi 1,4k 1 9
1 Antwort
3
Seit es die TPL gibt, arbeite ich nur noch in Ausnahmefällen mit "puren" Threads. Die Abstraktion einer Task und die darauf definierten Operationen sind deutlich les- und wartbarer, imho auch verständlicher. Das Thema Langläufer wird in der TPL explizit berücksichtigt, siehe hierzu TaskCreationOptions.LongRunning. Das schöne an der TPL ist, dass dort unglaublich viel Expertenwissen drinsteckt, das wir nicht zwingend haben müssen. Wenn ich einen Thread starte, habe ich automatisch Nebenläufigkeit im System. Wenn ich eine Task starte, habe ich nur potentielle Nebenläufigkeit im System, die TPL bzw. der verwendete Scheduler entscheidet das. Bei einer LongRunning Task wird mit großer Wahrscheinlichkeit ein eigener Thread gestartet, gewiss ist das aber nicht.
Mit .NET 4.5 und async/await (ich hoffe, das hat man VB.NET auch in irgendeiner Form spendiert) wird das Ganze noch weiter abstrahiert. Das Konzept baut aber auf der TPL auf.

Bisher bin ich noch gar nicht wirklich auf Deine Frage eingegangen, sorry. Nach der langen Hymne auf die TPL zwei Antworten dazu:

1. ThreadPool nur für kurze Aufgaben, Langläufer in eigene Threads auslagern, also so wie Du es wohl bereits machst.

2. Besser auf TPL umstellen ;-)

Da ich nicht genau weiß, was Deine Threads so verarbeiten, noch zwei weitere sehenswerte Schmankerl: TPL Dataflow und ReactiveExtensions
10.09.2013
ffordermaier 8,4k 3 9
Vielen Dank für die geniale Antwort erst mal. Wird noch einige Zeit brauchen, bis ich die Links inhaliert habe ;-) Was ich bislang von der TPL gelesen habe, ist das wohl auch eine Alternative. Scheint ähnlich, aber doch ganz anders als Threads/Threadpool zu arbeiten (async gibt es bei mir nicht, bei uns ist "nur" .Net 4 installiert). Gibt es eigentlich eine Seite, wo die verschiedenen Methoden zu Threads/Tasks verglichen werden (z. B. Start, Überwachung usw.)?
muffi 11.09.2013
2
So einen direkten Vergleich kenne ich nicht, aber hier findest Du eine Artikelserie, die viele Facetten von Tasks beleuchtet:
http://www.codeproject.com/Articles/152765/Task-Parallel-Library-1-of-n
ffordermaier 11.09.2013
Ui, das ist schön! Auf Codeproject hatte ich mal eine ähnliche Serie gesehen, da ging es aber über Threads. Werde ich mir definitiv reinziehen, Danke!
muffi 11.09.2013

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH