Delen via


Over processen en draadjes

Elk proces de resources biedt die nodig zijn om een programma uit te voeren. Een proces heeft een virtuele adresruimte, uitvoerbare code, open ingangen voor systeemobjecten, een beveiligingscontext, een unieke proces-id, omgevingsvariabelen, een prioriteitsklasse, minimale en maximale werksetgrootten en ten minste één thread van uitvoering. Elk proces wordt gestart met één thread, ook wel de primaire threadgenoemd, maar kan extra threads maken vanuit een van zijn threads.

Een thread is de entiteit binnen een proces die kan worden ingepland voor uitvoering. Alle threads van een proces delen de virtuele adresruimte en systeembronnen. Bovendien onderhoudt elke thread uitzonderingshandlers, een planningsprioriteit, lokale threadopslag, een unieke thread-id en een set structuren die het systeem gebruikt om de threadcontext op te slaan totdat deze is gepland. De threadcontext bevat de set machineregisters van de thread, de kernelstack, een threadomgevingsblok en een gebruikersstack in de adresruimte van het threadproces. Threads kunnen ook hun eigen beveiligingscontext hebben, die kan worden gebruikt voor het imiteren van clients.

Microsoft Windows biedt ondersteuning voor preemptive multitasking, waardoor het effect van gelijktijdige uitvoering van meerdere threads uit meerdere processen ontstaat. Op een computer met meerdere processors kan het systeem tegelijkertijd zoveel threads uitvoeren als er processors op de computer zijn.

Met een taakobject kunnen groepen processen als een eenheid worden beheerd. Taakobjecten zijn naambare, beveiligbare, deelbare objecten die kenmerken beheren van de processen die eraan zijn gekoppeld. Bewerkingen die worden uitgevoerd op het taakobject zijn van invloed op alle processen die zijn gekoppeld aan het taakobject.

Een toepassing kan de thread pool gebruiken om het aantal toepassingsthreads te verminderen en het beheer van de worker threads te bieden. Toepassingen kunnen werkitems in de wachtrij plaatsen, werk koppelen aan wachtbare handles, automatisch werkitems in de wachtrij plaatsen op basis van een timer en verbinden met I/O.

gebruikersmodusschedeling (UMS) is een lichtgewicht mechanisme dat applicaties kunnen gebruiken om hun eigen threads te plannen. Een toepassing kan schakelen tussen UMS-threads in de gebruikersmodus zonder de systeemplanner te betrekken en weer controle over de processor te krijgen als een UMS-thread in de kernel blokkeert. Elke UMS-thread heeft een eigen threadcontext in plaats van de threadcontext van één thread te delen. De mogelijkheid om te schakelen tussen threads in de gebruikersmodus maakt UMS efficiënter dan threadgroepen voor kortlopende werkitems waarvoor weinig systeemaanroepen nodig zijn.

Een fiber is een uitvoeringseenheid die handmatig door de toepassing moet worden gepland. Fibers werken in de context van de threads die ze inplannen. Elke thread kan meerdere vezels inplannen. Over het algemeen bieden vezels geen voordelen ten opzichte van een goed ontworpen multithreaded toepassing. Het gebruik van fibers kan het echter eenvoudiger maken om applicaties te porten die zijn ontworpen om hun eigen threads te plannen.

Zie de volgende onderwerpen voor meer informatie: