Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

ThreadPool-Klasse

Stellt einen Threadpool bereit, der verwendet werden kann, um Aufgaben auszuführen, Arbeitsaufgaben bereitzustellen, asynchrone E/A zu verarbeiten, im Auftrag anderer Threads zu warten und Zeitgeber zu verarbeiten.

System.Object
  System.Threading.ThreadPool

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public static class ThreadPool

Der ThreadPool-Typ macht die folgenden Member verfügbar.

  Name Beschreibung
Öffentliche Methode Statischer Member BindHandle(IntPtr) Veraltet. Bindet ein Betriebssystemhandle an den ThreadPool.
Öffentliche Methode Statischer Member BindHandle(SafeHandle) Bindet ein Betriebssystemhandle an den ThreadPool.
Öffentliche Methode Statischer Member GetAvailableThreads Ruft die Differenz zwischen der von der GetMaxThreads-Methode zurückgegebenen maximalen Anzahl der Threads im Threadpool und der Anzahl der gerade aktiven Threads ab.
Öffentliche Methode Statischer Member Unterstützt von XNA Framework y5htx827.PortableClassLibrary(de-de,VS.100).gif GetMaxThreads Ruft die Anzahl der Anforderungen für den Threadpool ab, die gleichzeitig aktiv sein können. Alle über diese Zahl hinausgehenden Anforderungen bleiben in der Warteschlange, bis die Threads des Threadpools verfügbar sind.
Öffentliche Methode Statischer Member GetMinThreads Ruft die Mindestanzahl von Threads ab, die der Threadpool bei Bedarf erstellt, wenn neue Anforderungen gestellt werden, bevor zu einem Algorithmus zum Verwalten von Threaderstellung und -löschung gewechselt wird.
Öffentliche Methode Statischer Member Unterstützt von XNA Framework y5htx827.PortableClassLibrary(de-de,VS.100).gif QueueUserWorkItem(WaitCallback) Fügt der Warteschlange eine auszuführende Methode hinzu. Die Methode wird ausgeführt, wenn ein Thread des Threadpools verfügbar wird.
Öffentliche Methode Statischer Member Unterstützt von XNA Framework y5htx827.PortableClassLibrary(de-de,VS.100).gif QueueUserWorkItem(WaitCallback, Object) Fügt der Warteschlange eine auszuführende Methode hinzu und gibt ein Objekt an, das die von der Methode zu verwendenden Daten enthält. Die Methode wird ausgeführt, wenn ein Thread des Threadpools verfügbar wird.
Öffentliche Methode Statischer Member RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl mit Vorzeichen angegeben wird.
Öffentliche Methode Statischer Member RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 64-Bit-Ganzzahl mit Vorzeichen angegeben wird.
Öffentliche Methode Statischer Member RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, und gibt einen TimeSpan-Wert für das Timeout an.
Öffentliche Methode Statischer Member RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl ohne Vorzeichen angegeben wird.
Öffentliche Methode Statischer Member Unterstützt von XNA Framework SetMaxThreads Legt die Anzahl der Anforderungen für den Threadpool fest, die gleichzeitig aktiv sein können. Alle über diese Zahl hinausgehenden Anforderungen bleiben in der Warteschlange, bis die Threads des Threadpools verfügbar sind.
Öffentliche Methode Statischer Member SetMinThreads Legt die Mindestanzahl von Threads fest, die der Threadpool bei Bedarf erstellt, wenn neue Anforderungen gestellt werden, bevor zu einem Algorithmus zum Verwalten von Threaderstellung und -löschung gewechselt wird.
Öffentliche Methode Statischer Member UnsafeQueueNativeOverlapped Stellt einen überlappenden E/A-Vorgang zur Ausführung in die Warteschlange.
Öffentliche Methode Statischer Member UnsafeQueueUserWorkItem Stellt den angegebenen Delegaten in eine Warteschlange für den Threadpool, leitet die Aufrufliste jedoch nicht an den Arbeitsthread weiter.
Öffentliche Methode Statischer Member UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl mit Vorzeichen verwendet wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
Öffentliche Methode Statischer Member UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 64-Bit-Ganzzahl mit Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
Öffentliche Methode Statischer Member UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, und gibt einen TimeSpan-Wert für das Timeout an. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
Öffentliche Methode Statischer Member UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl ohne Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.
Zum Seitenanfang

Viele Anwendungen erstellen Threads, die lange Zeit im Ruhezustand verbleiben und auf das Eintreten eines Ereignisses warten. Andere Threads gehen in einen Ruhezustand über und verlassen diesen nur in periodischen Abständen, um Änderungen oder aktualisierte Statusinformationen abzufragen. Durch diesen Threadpool können Sie Threads effizienter einsetzen, indem Sie für die Anwendung einen Pool von systemverwalteten Arbeitsthreads bereitstellen. Beispiele für Vorgänge, die Threadpoolthreads verwenden:

  • Wenn Sie ein Task-Objekt oder Task<TResult>-Objekt erstellen, um eine Aufgabe asynchron auszuführen, wird für die Aufgabe standardmäßig die Ausführung auf einem Threadpoolthread geplant.

  • Asynchrone Zeitgeber verwenden den Threadpool. Threadpoolthreads führen Rückrufe von der System.Threading.Timer-Klasse aus und lösen Ereignisse aus der System.Timers.Timer-Klasse aus.

  • Wenn Sie registrierte Wait-Handles verwenden, überwacht ein Systemthread den Status der Wait-Handles. Nach Beendigung eines Wartevorgangs führt ein Arbeitsthread aus dem Threadpool die entsprechende Rückruffunktion aus.

Hinweis Hinweis

Die Threads im verwalteten Threadpool sind Hintergrundthreads. Das heißt, ihre IsBackground-Eigenschaften sind true. Dies bedeutet, dass ein ThreadPool-Thread eine Anwendung nicht weiter ausführt, wenn alle Vordergrundthreads beendet sind.

Sie können außerdem Arbeitsaufgaben in die Warteschlange aufnehmen, die keinen Bezug zu einem Wartevorgang für den Threadpool haben. Um das Behandeln einer Arbeitsaufgabe von einem Thread im Threadpool anzufordern, rufen Sie die QueueUserWorkItem-Methode auf. Diese Methode verwendet als Parameter einen Verweis auf die Methode oder auf den Delegaten, die bzw. der von dem aus dem Threadpool ausgewählten Thread aufgerufen wird. Sobald eine Arbeitsaufgabe in die Warteschlange aufgenommen wurde, kann sie nicht mehr abgebrochen werden.

Auch Zeitgeber von Zeitgeberwarteschlangen und registrierte Wartevorgänge verwenden den Threadpool. Die zugehörigen Rückruffunktionen werden an eine Warteschlange für den Threadpool übergeben.

Es gibt einen Threadpool pro Prozess. Ab .NET Framework, Version 4 ist die Standardgröße des Threadpools für einen Prozess von mehreren Faktoren abhängig, z. B. von der Größe des virtuellen Adressraums. Ein Prozess kann die GetMaxThreads-Methode aufrufen, um die Anzahl der Threads zu bestimmen. Die Anzahl der Threads im Threadpool kann mithilfe der SetMaxThreads-Methode geändert werden. Jeder Thread verwendet die Standardstapelgröße und wird mit Standardpriorität ausgeführt.

Hinweis Hinweis

Nicht verwalteter Code, der das .NET Framework hostet, kann die Größe des Threadpools mithilfe der CorSetMaxThreads-Funktion ändern, die in der Datei mscoree.h definiert ist.

Der Threadpool stellt neue Arbeitsthreads oder E/A-Abschlussthreads bei Bedarf bereit, bis der Mindestwert für jede Kategorie erreicht ist. Wenn ein Minimum erreicht wird, kann der Threadpool weitere Threads in dieser Kategorie erstellen oder warten, bis einige Aufgaben abgeschlossen sind. Ab .NET Framework 4 erstellt und zerstört der Threadpool Arbeitsthreads, um den Durchsatz zu optimieren. Der Durchsatz ist als die Anzahl der Aufgaben definiert, die pro Zeiteinheit abgeschlossen werden. Bei zu wenigen Threads werden die verfügbaren Ressourcen möglicherweise nicht optimal ausgenutzt, wohingegen bei zu vielen Threads Ressourcenkonflikte auftreten können.

Hinweis Hinweis

Wenn die Anforderungen niedrig sind, kann die tatsächliche Anzahl der Threads im Threadpool unterhalb der Mindestwerte liegen.

Sie können die GetMinThreads-Methode verwenden, um diese Mindestwerte abzurufen.

Warnhinweis Vorsicht

Sie können die SetMinThreads-Methode verwenden, um die Mindestanzahl an Threads zu erhöhen. Allerdings kann ein unnötiges Erhöhen dieses Wertes zu Leistungsproblemen führen. Wenn zu viele Aufgaben zum gleichen Zeitpunkt gestartet werden, werden möglicherweise alle langsam ausgeführt. In den meisten Fällen erreicht der Threadpool mit dem eigenen Algorithmus für die Zuordnung von Threads eine bessere Leistung.

Wenn der Threadpool einen Thread wiederverwendet, werden die Daten im lokalen Threadspeicher und in den mit dem ThreadStaticAttribute-Attribut markierten Feldern nicht gelöscht. Daten, die von einer Methode im lokalen Threadspeicher gespeichert werden, sind also für jede andere Methode zugänglich, die im selben Thread im Threadpool ausgeführt wird. Wenn eine Methode auf ein mit dem ThreadStaticAttribute-Attribut markiertes Feld zugreift, kann das Feld abhängig davon, in welchem Thread im Threadpool die Ausführung erfolgt, unterschiedliche Daten enthalten.

Hinweis Hinweis

Das auf diesen Typ oder Member angewendete HostProtectionAttribute-Attribut besitzt den folgenden Resources-Eigenschaftswert: Synchronization | ExternalThreading. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder einer URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter der HostProtectionAttribute-Klasse oder unter SQL Server-Programmierung und Hostschutzattribute.


using System;
using System.Threading;
public class Example {
    public static void Main() {
        // Queue the task.
        ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));

        Console.WriteLine("Main thread does some work, then sleeps.");
        // If you comment out the Sleep, the main thread exits before
        // the thread pool task runs.  The thread pool uses background
        // threads, which do not keep the application running.  (This
        // is a simple example of a race condition.)
        Thread.Sleep(1000);

        Console.WriteLine("Main thread exits.");
    }

    // This thread procedure performs the task.
    static void ThreadProc(Object stateInfo) {
        // No state object was passed to QueueUserWorkItem, so 
        // stateInfo is null.
        Console.WriteLine("Hello from the thread pool.");
    }
}


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Unterstützt in:

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Dieser Typ ist threadsicher.

Datum

Versionsgeschichte

Grund

Oktober 2010

Veraltete Standardgröße und veraltete Informationen über die Erstellung neuer Threads korrigiert.

Korrektur inhaltlicher Fehler.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ