Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een thread is een reeks instructies waaraan het besturingssysteem processortijd verleent. Elk proces dat in het besturingssysteem wordt uitgevoerd, bestaat uit ten minste één thread. Processen met meer dan één thread worden multithreaded genoemd.
Computers met meerdere processors, processors met meerdere kernen of hyperthreadingprocessen kunnen verschillende gelijktijdige threads uitvoeren. Parallelle verwerking met behulp van veel threads kan de programmaprestaties aanzienlijk verbeteren, maar het kan ook de foutopsporing moeilijker maken omdat u veel threads bijhoudt.
Perfecte parallelle verwerking is niet altijd mogelijk. Threads moeten soms worden gesynchroniseerd. Een thread moet mogelijk wachten op een resultaat van een andere thread, of een thread heeft mogelijk exclusieve toegang nodig tot een resource die door een andere thread wordt gebruikt. Synchronisatieproblemen zijn een veelvoorkomende oorzaak van fouten in multithreaded toepassingen. Soms kunnen threads uiteindelijk wachten op een resource die nooit beschikbaar komt. Dit resulteert in een toestand die impasse wordt genoemd.
Threads en processen
Threads en processen zijn gerelateerde concepten in computerwetenschap. Beide vertegenwoordigen reeksen instructies die in een specifieke volgorde moeten worden uitgevoerd. Instructies in afzonderlijke threads of processen kunnen echter parallel worden uitgevoerd.
Processen bestaan in het besturingssysteem en komen overeen met wat gebruikers zien als programma's of toepassingen. Een thread daarentegen bestaat binnen een proces. Daarom worden threads soms lichte processen genoemd. Elk proces bestaat uit een of meer threads.
Door het bestaan van meerdere processen kan een computer meer dan één taak tegelijk uitvoeren. Door het bestaan van meerdere threads kan een proces parallel worden uitgevoerd. Op een computer met multiprocessors kunnen processen of threads worden uitgevoerd op verschillende processors. Dit maakt echte parallelle verwerking mogelijk.
Hulpprogramma's voor het opsporen van fouten in multithreaded apps
Visual Studio biedt verschillende hulpprogramma's voor het opsporen van fouten in apps met meerderereads.
Voor threads zijn de primaire hulpprogramma's voor foutopsporing van threads het venster Parallelle stacks , het venster Parallel Watch , threadmarkeringen in bronvensters, het venster Threads en de werkbalk Locatie voor foutopsporing . Zie Debug a deadlock using Threads view using Threads view (Threads- weergave) voor meer informatie over de weergave Threads in Parallelle stacks. Zie Aan de slag met het opsporen van fouten in een multithreaded-toepassing voor meer informatie over het gebruik van de vensters Parallel Stacks en Parallel Watch. In het artikel Aan de slag ziet u hoe u threadmarkeringen gebruikt. Zie Walkthrough: Fouten opsporen in een C++AMP-toepassing.
Voor .NET-code die asynchroon gebruikt, zijn de primaire hulpprogramma's voor foutopsporing takenweergave in het venster Parallelle stacks . Zie Fouten opsporen in een asynchrone toepassing (.NET) om aan de slag te gaan.
Voor threads zijn de primaire hulpprogramma's voor foutopsporing van threads het venster Parallelle stacks , het venster Parallel Watch , threadmarkeringen in bronvensters, het venster Threads en de werkbalk Locatie voor foutopsporing . Zie Threads en taken weergeven in het venster Parallelle stacks voor meer informatie over de weergave Threads in Parallelle stacks. Zie Aan de slag met het opsporen van fouten in een multithreaded-toepassing voor meer informatie over het gebruik van de vensters Parallel Stacks en Parallel Watch. In het artikel Aan de slag ziet u hoe u threadmarkeringen gebruikt. Zie Walkthrough: Fouten opsporen in een C++AMP-toepassing.
Voor .NET-code die asynchroon gebruikt, zijn de primaire hulpprogramma's voor foutopsporing takenweergave in het venster Parallelle stacks . Voor meer informatie, zie Threads en taken weergeven in het venster Parallelle stacks.
Voor foutopsporing van threads op de GPU is het primaire hulpprogramma het venster GPU-threads . Zie Procedure: Het venster GPU-threads gebruiken.
Voor processen zijn de primaire hulpprogramma's het dialoogvenster Koppelen aan proces , het venster Processen en de werkbalk Locatie voor foutopsporing .
Visual Studio biedt ook krachtige onderbrekingspunten en traceringspunten, wat handig kan zijn wanneer u fouten in toepassingen met meerderereads opsneert. Gebruik onderbrekingspuntvoorwaarden en filters om onderbrekingspunten op afzonderlijke threads te plaatsen. Tracepoints stellen u in staat om de uitvoering van uw programma te traceren zonder te breken, om problemen zoals impasses te bestuderen. Zie Onderbrekingspuntacties en traceringspunten voor meer informatie.
Het opsporen van fouten in een multithreaded-toepassing met een gebruikersinterface kan bijzonder moeilijk zijn. U kunt overwegen de toepassing uit te voeren op een tweede computer en externe foutopsporing te gebruiken. Zie Externe foutopsporing voor meer informatie.
In de volgende tabel ziet u de beschikbare informatie en de acties die u op elk van deze plaatsen kunt uitvoeren:
| Gebruikersinterface | Beschikbare informatie | Acties die u kunt uitvoeren |
|---|---|---|
| Dialoogvenster Bijvoegen bij proces | Beschikbare processen die u kunt koppelen aan: - Procesnaam (.exe) - Proces-id-nummer - Titel van menubalk - Type (beheerd v4.0; Beheerde v2.0, v1.1, v1.0; x86; x64; IA64) - Gebruikersnaam (accountnaam) - Sessienummer |
Selecteer een proces waaraan u wilt koppelen Een externe computer selecteren Transporttype wijzigen om verbinding te maken met externe computers |
| Venster Processen | Gekoppelde processen: - Procesnaam - Proces-id-nummer - Pad naar proces .exe - Titel van menubalk - Status (onderbreking. Wordt uitgevoerd) - Foutopsporing (systeemeigen, beheerd, enzovoort).) - Transporttype (standaard, systeemeigen zonder verificatie) - Transportkwalificatie (externe computer) |
Gereedschap: -Vastmaken -Loskoppelen -Beëindigen Snelmenu: -Vastmaken -Loskoppelen - Loskoppelen wanneer foutopsporing is gestopt -Beëindigen |
| Werkbalk Locatie voor foutopsporing | - Huidig proces - De toepassing onderbreken - De toepassing hervatten - De toepassing onderbreken en afsluiten - Huidige thread - Huidige threadvlagstatus in-/uitschakelen - Alleen gemarkeerde threads weergeven - Alleen huidig proces weergeven - Huidig stackframe |
- Overschakelen naar een ander proces - De toepassing onderbreken, hervatten of afsluiten - Overschakelen naar een andere thread in het huidige proces - Overschakelen naar een ander stackframe in de huidige thread - Huidige threads markeren of opheffen - Alleen gemarkeerde threads weergeven - Alleen het huidige proces weergeven |
| Venster Parallelle stacks | - Roep stacks aan voor meerdere threads in één venster. - Actief stackframe voor elke thread. - Bellers en aanroepen voor elke methode. - Detectie van impasses |
- Opgegeven threads filteren - Externe codestacks filteren - Overschakelen naar de weergave Taken - Een thread markeren of opheffen -Zoom - Stackframes kopiëren - Alle stacks opslaan/exporteren als afbeelding |
| Venster Parallel Watch | - De vlagkolom, waarin u een thread kunt markeren waarop u speciale aandacht wilt besteden. - De kolom Frame, waarin een pijl het geselecteerde frame aangeeft. - Een configureerbare kolom die de machine, het proces, de tegel, de taak en de thread kan weergeven. |
- Een thread markeren of opheffen - Alleen gemarkeerde threads weergeven - Schakelen tussen frames - Een kolom sorteren - Threads groeperen - Schroefdraad blokkeren of ontdooien - de gegevens exporteren in het venster Parallel Watch |
| Venster Threads | Threads in het huidige proces: - Thread-id - Beheerde id - Categorie (hoofdthread, interfacethread, aanroephandler voor externe procedures of werkrolthread) - Threadnaam - Locatie waar thread wordt gemaakt -Voorrang - Affiniteitsmasker - Opgeschort aantal - Procesnaam - Vlagindicator - Onderbroken indicator |
Gereedschap: -Zoeken - Gespreksstack zoeken - Markeer alleen mijn code - Aangepaste moduleselectie markeren - Groeperen op -Kolommen - Callstacks uitvouwen/samenvouwen - Groepen uitvouwen/samenvouwen - Bevriezen/ontdooien threads Snelmenu: - Threads in bron weergeven - Overschakelen naar een thread - Een actieve thread blokkeren - Dooi een bevroren draad - Een vlag toevoegen aan een thread voor aanvullende studie - Een thread opheffen - De naam van een thread wijzigen - Threads weergeven en verbergen Andere acties: - De aanroepstack voor een thread weergeven in een DataTip |
| Bronvenster | Threadindicatoren in linkergoot geven één of meerdere threads aan (standaard uitgeschakeld met behulp van het snelmenu in het venster Threads ) | Snelmenu: - Overschakelen naar een thread - Een vlag toevoegen aan een thread voor aanvullende studie - Een thread opheffen |
| Venster Taken | - Informatie weergeven over Task objecten, waaronder taak-id, taakstatus (gepland, actief, wachten, impasse) en welke thread aan de taak is toegewezen. - Huidige locatie in oproepstack. - Gedelegeerde doorgegeven aan de taak tijdens het maken |
- Overschakelen naar huidige taak - Een taak markeren of de vlag opheffen - Een taak blokkeren of ontdooien |
| Venster GPU-threads | - De vlagkolom, waarin u een thread kunt markeren waarop u speciale aandacht wilt besteden. - De huidige threadkolom, waarin een gele pijl de huidige thread aangeeft. - De kolom Aantal threads, waarin het aantal threads op dezelfde locatie wordt weergegeven. - De kolom Lijn , die de coderegel weergeeft waarin elke groep threads zich bevindt. - De kolom Adres , waarin het instructieadres wordt weergegeven waar elke groep threads zich bevindt. - De kolom Locatie , de locatie in de code van het adres. - De kolom Status , die aangeeft of de thread actief of geblokkeerd is. - De kolom Tegel , waarin de tegelindex voor de threads in de rij wordt weergegeven. |
- Wijzigen in een andere thread - Een bepaalde tegel en thread weergeven - Een kolom weergeven of verbergen - Sorteren op een kolom - Threads groeperen - Schroefdraad blokkeren of ontdooien - Een thread markeren of opheffen - Alleen gemarkeerde threads weergeven |