Forums Neueste Beiträge
 

ThreadPool Performance

12/08/2008 - 18:14 von Christian Havel | Report spam
Hi,

ich verwende in einer Server-Anwendung den ThreadPool, um mir die manuelle
Erzeugung von Threads und die dadurch vermutlich entstehenden
Performanceverluste (durch die Erzeugung) zu sparen.

Es fàllt auf, dass die Abarbeitung der gequeueten Eintràge
(QueueUserWorkItem) z.T. sehr lange auf sich warten làsst (bis zu 3 Sekunden).

Gibt es beim ThreadPool etwas besonderes zu beachten?

Christian
 

Lesen sie die antworten

#1 Frank Dzaebel
13/08/2008 - 09:58 | Warnen spam
Hallo Christian,

ich verwende in einer Server-Anwendung den ThreadPool, um mir die manuelle
Erzeugung von Threads und die dadurch vermutlich entstehenden
Performanceverluste (durch die Erzeugung) zu sparen.

Es fàllt auf, dass die Abarbeitung der gequeueten Eintràge
(QueueUserWorkItem) z.T. sehr lange auf sich warten làsst (bis zu
3 Sekunden). Gibt es beim ThreadPool etwas besonderes zu
beachten?



Es gibt einige Eigenheiten des (der) Threadpools, die
nicht unwichtig für solche Performance-Aspekte sind, ja:

[.NET Column: The CLR's Thread Pool]
http://msdn.microsoft.com/de-de/magazine/cc164139(en-us).aspx

Auch gibt es Hinweise, was ggf. zu vermeiden ist, wenn
man ThreadPool-Programmierung implementiert:

[ThreadPool-Klasse (System.Threading)]
http://msdn.microsoft.com/de-de/lib...dpool.aspx

Beachte auch die neuen Möglichkeiten ab Vista/Windows Server 2008

[Der Threadpool: Verbessern der Skalierbarkeit mit neuen Threadpool-APIs]
http://msdn.microsoft.com/de-de/mag...63327.aspx

Allgemein bei ThreadPools ist immer der Overhead des
"Threadpool Managements" mit zu berücksichtigen,
der bei steigenden Grössen dieses Pools signifikanter wird.

Auch würde man ggf. für Mehrkerncomputer anders optimieren:

[Parallele Leistung: Optimieren von verwaltetem Code für Mehrkerncomputer]
http://msdn.microsoft.com/de-de/mag...63340.aspx

Oder die Entscheidung, ob Workerthreads oder
CompletionPortThreads benutzt werden, was letztlich
Unterschiede bei Performance und Ressourcenverbrauch bedeutet.

[Programming the Thread Pool in the .NET Framework]
http://msdn.microsoft.com/en-us/lib...73903.aspx

Dann die Art der Synchronisierung. Da ist es IMHO
noch am wahrscheinlichsten, Fehler zu machen.

[Threadsynchronisierung]
http://msdn.microsoft.com/de-de/lib...9f9ts.aspx

[Erweiterte Synchronisierungsverfahren]
http://msdn.microsoft.com/de-de/lib...8dte8.aspx

Oder schaue Dir auch allgemeinere Empfehlungen der
Nutzbarkeit in verschiedenen Szenarien an:

[Empfohlene Vorgehensweise für das verwaltete Threading]
http://msdn.microsoft.com/de-de/lib...txz50.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen