Vlákna zobrazují sestavy časové osy ve Vizualizéru souběžnosti.
Tento článek obsahuje informace o sestavách časové osy v zobrazení Vlákna vizualizéru souběžnosti.
Doba provádění (zobrazení vláken)
Tyto segmenty v časové ose Zobrazení vláken představují čas spuštění, kdy vlákno aktivně pracuje na logickém jádru v systému.
Změny ve stavu vlákna jsou zjištěny prostřednictvím událostí přepínače kontextu jádra. Trasování událostí pro Windows (ETW) zaznamenává ukázkové zásobníky v každém milisekundě. Ve velmi krátkém zeleném segmentu je možné, že se nevybíná žádný vzorek. Některé krátké segmenty spuštění proto nemusí zobrazovat žádný zásobník volání.
Když kliknete na segment provádění, Vizualizér souběžnosti zobrazí ukázkový zásobník nejblíže umístění kliknutí. Umístění tohoto ukázkového zásobníku se zobrazuje černou šipkou nebo kurzorem nad časovou osou a ukázkový zásobník se zobrazí na kartě Aktuální .
Chcete-li zobrazit tradiční profil vzorkování pro všechny segmenty spuštění v aktuálním zobrazení, klepněte na tlačítko Spuštění v profilu viditelné časové osy.
čas I/O (zobrazení vláken)
Tyto segmenty na časové ose jsou přidružené k časům blokování, které jsou zařazené do kategorií jako vstupně-výstupní operace. To znamená, že vlákno čeká na dokončení vstupně-výstupní operace. Vlákno může být blokováno v rozhraní API nebo čekáním jádra souvisejícího s vstupně-výstupními operacemi, že vizualizér souběžnosti počítá jako vstupně-výstupní operace. Rozhraní API, jako CreateFile()
je například , ReadFile()
a WSARecv()
spadají do této skupiny.
Doba správy paměti
Tyto segmenty na časové ose jsou přidružené k časům blokování, které jsou zařazeny do kategorií jako Správa paměti. Tento scénář znamená, že vlákno je blokováno událostí přidruženou k operaci správy paměti, jako je stránkování. Během této doby se vlákno zablokovalo v rozhraní API nebo ve stavu jádra, že vizualizér souběžnosti počítá jako správu paměti. Patří mezi ně události, jako je stránkování a přidělení paměti.
Prozkoumejte související zásobníky volání a sestavy profilů, abyste lépe porozuměli základním důvodům bloků, které jsou zařazené do kategorií jako Správa paměti.
Doba předběžného odstranění
Tyto segmenty na časové ose jsou přidružené k době blokování, která je zařazena do kategorie Preemption. Z této kategorie vyplývá, že vlákno se přepne z jednoho z těchto důvodů:
Plánovač ho nahradil vláknem s vyšší prioritou.
Spuštění kvanta vlákna vypršela a další vlákna byla připravena ke spuštění.
Během této doby se vlákno zablokovalo z důvodu čekání jádra, že vizualizér souběžnosti počítá jako preemption. Segmenty preemption se spustí, když je vlákno vloženo z logického jádra, a končí, když toto vlákno obnoví provádění.
Popis pro předem připravený segment zobrazuje název procesu nebo vlákna, které způsobily preemption. To však neznamená, že proces nebo vlákno, které převzaly skutečně běžet v průběhu předem nastaveného období.
Doba spánku
Tyto segmenty na časové ose jsou přidružené k době blokování, která je zařazena do kategorie Režim spánku. Kategorie spánku znamená, že vlákno dobrovolně vzdalo své logické jádro a neprovádí žádnou práci. Během této doby se vlákno zablokovalo v rozhraní API, které vizualizér souběžnosti počítá jako režim spánku. Rozhraní API, jako je tato skupina, SwitchToThread()
patří Sleep()
do této skupiny.
Čas synchronizace
Tyto segmenty na časové ose jsou přidružené k časům blokování, které jsou zařazeny do kategorií jako Synchronizace. Pokud je vlákno při synchronizaci označené jako blokované, předpokládá se jedna z těchto věcí:
Spuštění vlákna mohlo vést k volání dobře známého rozhraní API pro synchronizaci vláken, například
EnterCriticalSection()
neboWaitForSingleObject()
.Algoritmus porovnávání rozhraní API nemůže být zcela komplexní, a proto se některá rozhraní API, která by mohla být mapována na jiné kategorie, může také zobrazit jako synchronizace, protože rámec v zásobníku volání nakonec dosáhl základního jádra blokující primitivního kódu, které bylo namapováno na tuto kategorii.
Pokud chcete porozumět základní příčině události blokující vlákno, pečlivě zkontrolujte blokující zásobníky volání a sestavy profilů.
Doba zpracování uživatelského rozhraní
Tyto segmenty na časové ose jsou přidružené k časům blokování, které jsou zařazené do kategorií jako zpracování uživatelského rozhraní. To znamená, že vlákno pumpuje zprávy systému Windows nebo provádí jiné uživatelské rozhraní práce. Během této doby bylo vlákno zablokováno v rozhraní API, které vizualizér souběžnosti počítá jako zpracování uživatelského rozhraní. Rozhraní API, jako je tato skupina, MsgWaitForMultipleObjects()
patří GetMessage()
do této skupiny.
Pokud není identifikováno žádné předdefinované blokující rozhraní API, zkontrolujte zásobníky volání a sestavy profilů a určete základní příčiny zpoždění.
Kategorie Zpracování uživatelského rozhraní vám pomůže pochopit rychlost odezvy aplikací grafického uživatelského rozhraní a je žádoucí v aplikacích, které závisí na odezvě uživatelského rozhraní. Pokud například vlákno uživatelského rozhraní v aplikaci dosáhne 100% času při zpracování uživatelského rozhraní, pravděpodobně reaguje. Pokud však vlákno uživatelského rozhraní stráví značným časem v jiných kategoriích, vyhledejte původní příčiny a zvažte možnosti snížení kategorií bez uživatelského rozhraní v daném vlákně.