Informationen zu Prozessen und Threads
Jeder Prozess stellt die Ressourcen bereit, die zum Ausführen eines Programms erforderlich sind. Ein Prozess verfügt über einen virtuellen Adressraum, ausführbaren Code, offene Handles für Systemobjekte, einen Sicherheitskontext, einen eindeutigen Prozessbezeichner, Umgebungsvariablen, eine Prioritätsklasse, minimale und maximale Arbeitssatzgrößen und mindestens einen Ausführungsthread. Jeder Prozess wird mit einem einzelnen Thread gestartet, der häufig als primärer Thread bezeichnet wird, kann aber zusätzliche Threads aus jedem seiner Threads erstellen.
Ein Thread ist die Entität in einem Prozess, der für die Ausführung geplant werden kann. Alle Threads eines Prozesses teilen sich den virtuellen Adressraum und die Systemressourcen. Darüber hinaus verwaltet jeder Thread Ausnahmehandler, eine Planungspriorität, einen lokalen Threadspeicher, einen eindeutigen Threadbezeichner und eine Reihe von Strukturen, die das System verwendet, um den Threadkontext zu speichern, bis er geplant ist. Der Threadkontext umfasst die Computerregister des Threads, den Kernelstapel, einen Threadumgebungsblock und einen Benutzerstapel im Adressraum des Threadprozesses. Threads können auch über einen eigenen Sicherheitskontext verfügen, der zum Annehmen der Identität von Clients verwendet werden kann.
Microsoft Windows unterstützt präemptives Multitasking, wodurch sich die gleichzeitige Ausführung mehrerer Threads aus mehreren Prozessen auswirkt. Auf einem Multiprozessorcomputer kann das System gleichzeitig so viele Threads ausführen, wie Prozessoren auf dem Computer vorhanden sind.
Ein Auftragsobjekt ermöglicht die Verwaltung von Gruppen von Prozessen als Einheit. Auftragsobjekte sind namierbare, sicherungsfähige, Sharable-Objekte, die Attribute der ihnen zugeordneten Prozesse steuern. Vorgänge, die für das Auftragsobjekt ausgeführt werden, wirken sich auf alle Prozesse aus, die dem Auftragsobjekt zugeordnet sind.
Eine Anwendung kann den Threadpool verwenden, um die Anzahl der Anwendungsthreads zu reduzieren und die Verwaltung der Workerthreads bereitzustellen. Anwendungen können Arbeitselemente in die Warteschlange stellen, Arbeit wartebaren Handles zuordnen, automatisch basierend auf einem Timer in die Warteschlange stellen und E/A binden.
Ums (User Mode Scheduling ) ist ein einfacher Mechanismus, mit dem Anwendungen ihre eigenen Threads planen können. Eine Anwendung kann im Benutzermodus zwischen UMS-Threads wechseln, ohne den Systemplaner einzubeziehen, und die Kontrolle über den Prozessor wiedererlangen, wenn ein UMS-Thread im Kernel blockiert. Jeder UMS-Thread verfügt über einen eigenen Threadkontext, anstatt den Threadkontext eines einzelnen Threads frei zu geben. Die Möglichkeit, im Benutzermodus zwischen Threads zu wechseln, macht UMS effizienter als Threadpools für kurz andauernde Arbeitselemente, die wenige Systemaufrufe erfordern.
Eine Faser ist eine Ausführungseinheit, die von der Anwendung manuell geplant werden muss. Fasern werden im Kontext der Threads ausgeführt, die sie planen. Jeder Thread kann mehrere Fasern planen. Im Allgemeinen bieten Fasern keine Vorteile gegenüber einer gut konzipierten Multithreadanwendung. Die Verwendung von Fasern kann es jedoch einfacher machen, Anwendungen zu portieren, die zum Planen eigener Threads entwickelt wurden.
Weitere Informationen finden Sie in den folgenden Themen:
- Multitasking
- Zeitplanung
- Mehrere Threads
- Untergeordnete Prozesse
- Threadpools
- Auftragsobjekte
- Planung im Benutzermodus
- Fasern