Udostępnij za pośrednictwem


Wątki wyświetlają raporty osi czasu w wizualizatorze współbieżności

Ten artykuł zawiera informacje o raportach osi czasu w widoku Wątki wizualizatora współbieżności.

Czas wykonywania (widok wątków)

Te segmenty w widoku wątków reprezentują czas wykonywania, gdy wątek aktywnie wykonuje pracę na rdzeniu logicznym w systemie.

Zmiany stanu wątku są wykrywane za pośrednictwem zdarzeń przełącznika kontekstu jądra. Śledzenie zdarzeń dla systemu Windows (ETW) przechwytuje przykładowe stosy co milisekundę. W bardzo krótkim segmencie zielonym możliwe jest, że nie pobrano próbki. W związku z tym niektóre krótkie segmenty wykonywania mogą nie wyświetlać stosu wywołań.

Po kliknięciu segmentu wykonywania wizualizator współbieżności wyświetla przykładowy stos najbliżej lokalizacji kliknięcia. Lokalizacja tego przykładowego stosu jest wyświetlana przez czarną strzałkę lub daszek nad osią czasu, a przykładowy stos jest wyświetlany na karcie Bieżący .

Aby wyświetlić tradycyjny profil próbkowania dla wszystkich segmentów wykonywania w bieżącym widoku, kliknij pozycję Wykonywanie w profilu widocznej osi czasu.

I/O time (Widok wątków)

Te segmenty na osi czasu są skojarzone z czasami blokowania, które są klasyfikowane jako we/wy. Oznacza to, że wątek czeka na zakończenie operacji we/wy. Wątek mógł zostać zablokowany w interfejsie API lub przez jądro związane z we/wy czeka, że wizualizator współbieżności liczy jako operacje we/wy. Interfejsy API, takie jak CreateFile(), ReadFile()i WSARecv() należą do tej grupy.

Czas zarządzania pamięcią

Te segmenty na osi czasu są skojarzone z czasami blokowania, które są klasyfikowane jako Zarządzanie pamięcią. Ten scenariusz oznacza, że wątek jest blokowany przez zdarzenie skojarzone z operacją zarządzania pamięcią, taką jak stronicowanie. W tym czasie wątek został zablokowany w interfejsie API lub stanie jądra, że wizualizator współbieżności zlicza jako zarządzanie pamięcią. Obejmują one zdarzenia, takie jak stronicowanie i alokacja pamięci.

Zapoznaj się ze skojarzonymi stosami wywołań i raportami profilów, aby lepiej zrozumieć podstawowe przyczyny bloków sklasyfikowanych jako Zarządzanie pamięcią.

Czas wywłaszczania

Te segmenty na osi czasu są skojarzone z czasem blokowania, który jest kategoryzowany jako wywłaszczanie. Ta kategoria oznacza, że wątek jest wyłączony z jednego z następujących powodów:

  • Harmonogram zastąpił go przy użyciu wątku o wyższym priorytcie.

  • Kwant wykonania wątku wygasł, a inne wątki były gotowe do wykonania.

    W tym czasie wątek został zablokowany przez przyczynę oczekiwania jądra, że wizualizator współbieżności jest liczony jako preemption. Segmenty wywłaszczania zaczynają się, gdy wątek jest wypychany z rdzenia logicznego i kończy się po wznowieniu wykonywania tego wątku.

    Etykietka narzędzia dla wywłaszczonego segmentu wyświetla nazwę procesu lub wątku, który spowodował wywłaszczanie. Nie oznacza to jednak, że proces lub wątek, który przejął faktycznie trwał w okresie przewłaszczonym.

Czas uśpienia

Te segmenty na osi czasu są skojarzone z czasem blokowania sklasyfikowanym jako Uśpienie. Kategoria uśpienia oznacza, że wątek dobrowolnie zrezygnował z logicznego rdzenia i nie wykonuje żadnej pracy. W tym czasie wątek został zablokowany w interfejsie API, który wizualizator współbieżności zlicza jako uśpienie. Interfejsy API, takie jak Sleep() i SwitchToThread() należą do tej grupy.

Czas synchronizacji

Te segmenty na osi czasu są skojarzone z czasami blokowania, które są klasyfikowane jako Synchronizacja. Gdy wątek jest oznaczony jako zablokowany podczas synchronizacji, jedna z tych rzeczy jest implikowane:

  • Wykonanie wątku mogło spowodować wywołanie dobrze znanego interfejsu API synchronizacji wątków, takiego jak EnterCriticalSection() lub WaitForSingleObject().

  • Algorytm dopasowywania interfejsu API nie może być całkowicie kompleksowy i dlatego niektóre interfejsy API, które mogą być mapowane na inne kategorie, mogą być również wyświetlane jako synchronizacja, ponieważ ramka w stosie wywołań ostatecznie osiągnęła podstawowy element pierwotny blokujący jądro, który został zamapowany na tę kategorię.

    Aby zrozumieć podstawową przyczynę zdarzenia blokowania wątku, dokładnie zbadaj stosy wywołań blokujących i raporty profilów.

Czas przetwarzania interfejsu użytkownika

Te segmenty na osi czasu są skojarzone z czasami blokowania, które są klasyfikowane jako przetwarzanie interfejsu użytkownika. Oznacza to, że wątek pompuje komunikaty systemu Windows lub wykonuje inną pracę interfejsu użytkownika. W tym czasie wątek został zablokowany w interfejsie API, który wizualizator współbieżności zlicza jako przetwarzanie interfejsu użytkownika. Interfejsy API, takie jak GetMessage() i MsgWaitForMultipleObjects() należą do tej grupy.

Jeśli nie zidentyfikowano wstępnie zdefiniowanego interfejsu API blokowania, przejrzyj stosy wywołań i raporty profilów, aby określić podstawowe przyczyny opóźnienia.

Kategoria Przetwarzanie interfejsu użytkownika pomaga zrozumieć czas odpowiedzi aplikacji graficznego interfejsu użytkownika i jest pożądana w aplikacjach, które zależą od czasu odpowiedzi interfejsu użytkownika. Jeśli na przykład wątek interfejsu użytkownika w aplikacji osiągnie 100% czasu przetwarzania interfejsu użytkownika, prawdopodobnie odpowiada. Jeśli jednak wątek interfejsu użytkownika spędza dużo czasu w innych kategoriach, poszukaj głównych przyczyn i rozważ opcje zmniejszenia kategorii innych niż interfejs użytkownika w tym wątku.