Delen via


Threads en threading

Met multithreading kunt u de reactiesnelheid van uw toepassing verhogen en, als uw toepassing wordt uitgevoerd op een multiprocessor- of multikernsysteem, verhoogt u de doorvoer.

Processen en threads

Een proces is een programma dat wordt uitgevoerd. Een besturingssysteem gebruikt processen om de toepassingen te scheiden die worden uitgevoerd. Een thread is de basiseenheid waaraan een besturingssysteem processortijd toewijst. Elke thread heeft een planningsprioriteit en onderhoudt een set structuren die het systeem gebruikt om de threadcontext op te slaan wanneer de uitvoering van de thread wordt onderbroken. De threadcontext bevat alle informatie die de thread nodig heeft om de uitvoering naadloos te hervatten, inclusief de set CPU-registers en stack van de thread. Meerdere threads kunnen worden uitgevoerd in de context van een proces. Alle threads van een proces delen de virtuele adresruimte. Een thread kan elk onderdeel van de programmacode uitvoeren, inclusief onderdelen die momenteel door een andere thread worden uitgevoerd.

Notitie

.NET Framework biedt een manier om toepassingen binnen een proces te isoleren met behulp van toepassingsdomeinen. (Toepassingsdomeinen zijn niet beschikbaar op .NET Core.) Zie de sectie Toepassingsdomeinen en threads van het artikel Toepassingsdomeinen voor meer informatie.

Standaard wordt een .NET-programma gestart met één thread, ook wel de primaire thread genoemd. Er kunnen echter extra threads worden gemaakt om code parallel of gelijktijdig met de primaire thread uit te voeren. Deze threads worden vaak werkrolthreads genoemd.

Wanneer meerdere threads gebruiken

U gebruikt meerdere threads om de reactiesnelheid van uw toepassing te verhogen en om te profiteren van een multiprocessor- of multikernsysteem om de doorvoer van de toepassing te verhogen.

Overweeg een bureaubladtoepassing, waarin de primaire thread verantwoordelijk is voor elementen van de gebruikersinterface en reageert op gebruikersacties. Gebruik werkrolthreads om tijdrovende bewerkingen uit te voeren die anders de primaire thread in beslag nemen en de gebruikersinterface niet responsief maken. U kunt ook een speciale thread gebruiken voor netwerk- of apparaatcommunicatie om sneller te reageren op binnenkomende berichten of gebeurtenissen.

Als uw programma bewerkingen uitvoert die parallel kunnen worden uitgevoerd, kan de totale uitvoeringstijd worden verlaagd door deze bewerkingen uit te voeren in afzonderlijke threads en het programma uit te voeren op een multiprocessor- of multikernsysteem. Op een dergelijk systeem kan het gebruik van multithreading de doorvoer verhogen, samen met de toegenomen reactiesnelheid.

Multithreading gebruiken in .NET

Vanaf .NET Framework 4 is de aanbevolen manier om multithreading te gebruiken, het gebruik van Task Parallel Library (TPL) en Parallel LINQ (PLINQ). Zie Parallel programmeren voor meer informatie.

Zowel TPL als PLINQ zijn afhankelijk van de ThreadPool threads. De System.Threading.ThreadPool klasse biedt een .NET-toepassing met een groep werkrolthreads. U kunt ook thread-poolthreads gebruiken. Zie De beheerde threadgroep voor meer informatie.

Ten slotte kunt u de System.Threading.Thread klasse gebruiken die een beheerde thread vertegenwoordigt. Zie Threads en threading gebruiken voor meer informatie.

Mogelijk moeten meerdere threads toegang krijgen tot een gedeelde resource. Als u de resource in een niet-ondergebroken status wilt houden en racevoorwaarden wilt voorkomen, moet u de toegang tot de thread synchroniseren. Mogelijk wilt u ook de interactie van meerdere threads coördineren. .NET biedt verschillende typen die u kunt gebruiken om de toegang tot een gedeelde resource te synchroniseren of threadinteractie te coördineren. Zie Overzicht van synchronisatieprimitief voor meer informatie.

Omgaan met uitzonderingen in threads. Niet-verwerkte uitzonderingen in threads beëindigen het proces over het algemeen. Zie Uitzonderingen in beheerde threads voor meer informatie.

Zie ook