Wanneer multitasking gebruiken
Er zijn twee manieren om multitasking te implementeren: als één proces met meerdere threads of als meerdere processen, elk met een of meer threads. Een toepassing kan elke thread die een privéadresruimte en privébronnen nodig heeft in een eigen proces plaatsen om deze te beschermen tegen de activiteiten van andere procesthreads.
Een multithreaded proces kan wederzijds exclusieve taken beheren met threads, zoals het bieden van een gebruikersinterface en het uitvoeren van achtergrondberekeningen. Het maken van een multithreaded proces kan ook een handige manier zijn om een programma te structuren dat meerdere vergelijkbare of identieke taken gelijktijdig uitvoert. Een benoemde pipe-server kan bijvoorbeeld een thread maken voor elk clientproces dat aan de pijp wordt gekoppeld. Deze thread beheert de communicatie tussen de server en de client. Uw proces kan meerdere threads gebruiken om de volgende taken uit te voeren:
- Invoer voor meerdere vensters beheren.
- Beheer invoer van verschillende communicatieapparaten.
- Taken van verschillende prioriteit onderscheiden. Een thread met hoge prioriteit beheert bijvoorbeeld tijdkritische taken en een thread met lage prioriteit voert andere taken uit.
- Hiermee staat u toe dat de gebruikersinterface responsief blijft, terwijl er tijd wordt toegewezen aan achtergrondtaken.
Het is doorgaans efficiënter voor een toepassing om multitasking te implementeren door één, multithreaded proces te maken in plaats van meerdere processen te maken, om de volgende redenen:
- Het systeem kan een contextswitch sneller uitvoeren voor threads dan processen, omdat een proces meer overhead heeft dan een thread doet (de procescontext is groter dan de threadcontext).
- Alle threads van een proces delen dezelfde adresruimte en hebben toegang tot de globale variabelen van het proces, waardoor de communicatie tussen threads kan worden vereenvoudigd.
- Alle threads van een proces kunnen open ingangen delen met resources, zoals bestanden en pijpen.
Er zijn andere technieken die u kunt gebruiken in de plaats van multithreading. De belangrijkste hiervan zijn: asynchrone invoer en uitvoer (I/O), I/O-voltooiingspoorten, asynchrone procedureaanroepen (APC) en de mogelijkheid om te wachten op meerdere gebeurtenissen.
Eén thread kan meerdere tijdrovende I/O-aanvragen initiëren die gelijktijdig kunnen worden uitgevoerd met behulp van asynchrone I/O. Asynchrone I/O kan worden uitgevoerd op bestanden, pijpen en seriële communicatieapparaten. Voor meer informatie, zie Synchronisatie en Overlappende Invoer en Uitvoer.
Eén thread kan zijn eigen uitvoering blokkeren terwijl hij wacht op het plaatsvinden van één of alle van meerdere gebeurtenissen. Dit is efficiënter dan het gebruik van meerdere threads, elk wachtend op één gebeurtenis en efficiënter dan het gebruik van één thread die processortijd verbruikt door voortdurend te controleren op gebeurtenissen. Zie Wait Functionsvoor meer informatie.