Freigeben über


Verwendung von Multitasking

Es gibt zwei Möglichkeiten, Multitasking zu implementieren: als einzelner Prozess mit mehreren Threads oder als mehrere Prozesse mit jeweils einem oder mehreren Threads. Eine Anwendung kann jeden Thread, der einen privaten Adressraum und private Ressourcen erfordert, in einen eigenen Prozess einfügen, um ihn vor den Aktivitäten anderer Prozessthreads zu schützen.

Ein Multithreadprozess kann sich gegenseitig ausschließende Aufgaben mit Threads verwalten, z. B. die Bereitstellung einer Benutzeroberfläche und das Ausführen von Hintergrundberechnungen. Das Erstellen eines Multithreadprozesses kann auch eine bequeme Möglichkeit sein, ein Programm zu strukturieren, das mehrere ähnliche oder identische Aufgaben gleichzeitig ausführt. Beispielsweise kann ein Named Pipe-Server einen Thread für jeden Clientprozess erstellen, der an die Pipe angefügt wird. Dieser Thread verwaltet die Kommunikation zwischen dem Server und dem Client. Ihr Prozess kann mehrere Threads verwenden, um die folgenden Aufgaben auszuführen:

  • Verwalten sie Eingaben für mehrere Fenster.
  • Verwalten sie Eingaben von mehreren Kommunikationsgeräten.
  • Unterscheiden von Tasks unterschiedlicher Priorität. Beispielsweise verwaltet ein Thread mit hoher Priorität zeitkritische Tasks, und ein Thread mit niedriger Priorität führt andere Tasks aus.
  • Gewährleisten einer reaktionsschnellen Benutzeroberfläche bei gleichzeitigem Zuweisen von Zeitsegmenten für im Hintergrund ausgeführten Tasks

Aus den folgenden Gründen ist es in der Regel effizienter für eine Anwendung, Multitasking zu implementieren, indem sie einen einzelnen Multithreadprozess erstellt, anstatt mehrere Prozesse zu erstellen:

  • Das System kann einen Kontextwechsel für Threads schneller ausführen als Prozesse, da ein Prozess mehr Mehraufwand hat als ein Thread (der Prozesskontext ist größer als der Threadkontext).
  • Alle Threads eines Prozesses nutzen den gleichen Adressraum und können auf die globalen Variablen des Prozesses zugreifen, was die Kommunikation zwischen Threads vereinfachen kann.
  • Alle Threads eines Prozesses können geöffnete Handles für Ressourcen wie Dateien und Pipes freigeben.

Es gibt andere Techniken, die Sie anstelle von Multithreading verwenden können. Die wichtigsten davon sind: asynchrone Eingabe und Ausgabe (E/A), E/A-Vervollständigungsports, asynchrone Prozeduraufrufe (asynchrone Prozeduraufrufe, APC) und die Möglichkeit, auf mehrere Ereignisse zu warten.

Ein einzelner Thread kann mehrere zeitaufwendige E/A-Anforderungen initiieren, die gleichzeitig mit asynchronen E/A-Vorgängen ausgeführt werden können. Asynchrone E/A-Vorgänge können auf Dateien, Pipes und seriellen Kommunikationsgeräten ausgeführt werden. Weitere Informationen finden Sie unter Synchronisierung und überlappende Eingabe und Ausgabe.

Ein einzelner Thread kann seine eigene Ausführung blockieren, während auf ein oder alle ereignisse gewartet wird. Dies ist effizienter als die Verwendung mehrerer Threads, die jeweils auf ein einzelnes Ereignis warten, und effizienter als die Verwendung eines einzelnen Threads, der Prozessorzeit beansprucht, indem kontinuierlich überprüft wird, ob Ereignisse auftreten. Weitere Informationen finden Sie unter Wartefunktionen.