Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 stosy próbek 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 odcinki wykonawcze 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 stosu próbek jest pokazywana przez czarną strzałkę lub daszek (^) nad osią czasu, a stos próbek pojawia się 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.
Czas we/wy (widok wątków)
Te segmenty na osi czasu są powiązane z czasami blokowania, które są klasyfikowane jako I/O. Oznacza to, że wątek czeka na zakończenie operacji we/wy. Wątek mógł zostać zablokowany w interfejsie API lub przez oczekiwanie jądra związane z we/wy, które wizualizator współbieżności traktuje jako we/wy. Interfejsy API, takie jak CreateFile(), ReadFile()i WSARecv() należą do tej grupy.
Czas zarządzania pamięcią
Te segmenty na linii 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 związane z operacją zarządzania pamięcią, taką jak stronicowanie (paging). W tym czasie wątek został zablokowany w interfejsie API lub stanie jądra, który wizualizator współbieżności liczy jako zarządzanie pamięcią. Obejmują one zdarzenia, takie jak stronicowanie i alokacja pamięci.
Przeanalizuj powiązane stosy wywołań i raporty profilów, aby lepiej zrozumieć zasadnicze przyczyny blokad sklasyfikowanych jako zarządzanie pamięcią.
Czas wywłaszczenia
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 z powodu oczekiwania jądra, które wizualizator współbieżności klasyfikuje jako przejęcie. 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ął kontrolę, faktycznie działał przez cały czas przerwy.
Czas uśpienia
Te segmenty w osi czasu są związane z czasem blokowania określonym jako Tryb Uśpienia. Kategoria uśpienia oznacza, że wątek dobrowolnie oddaje swój logiczny rdzeń i nie wykonuje żadnej pracy. W tym czasie wątek został zablokowany w API, które narzędzie Concurrency Visualizer 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 implikowana:
Wykonanie wątku mogło skutkować wywołaniem dobrze znanego API do synchronizacji wątków, takiego jak
EnterCriticalSection()lubWaitForSingleObject().Algorytm dopasowywania interfejsu API nie może być w pełni wyczerpujący, dlatego niektóre interfejsy API, które mogłyby być przypisane do innych kategorii, mogą być również traktowane jako synchronizacja, ponieważ ramka w stosie wywołań ostatecznie osiągnęła podstawowy prymityw blokujący jądra, 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 profilowania.
Czas przetwarzania interfejsu użytkownika
Te segmenty w linii czasu są powiązane z czasami blokowania, które są klasyfikowane jako przetwarzanie UI. Oznacza to, że wątek pompuje komunikaty systemu Windows lub wykonuje inną pracę interfejsu użytkownika. W tym czasie wątek został zablokowany w API, które Visualizer 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 blokującego interfejsu API, przeanalizuj stosy wywołań i raporty profilowania, aby określić podstawowe przyczyny opóźnienia.
Kategoria Przetwarzanie interfejsu użytkownika pomaga zrozumieć responsywność aplikacji GUI i jest pożądana w aplikacjach, które zależą od responsywności interfejsu użytkownika. Na przykład, jeśli wątek interfejsu użytkownika w aplikacji osiągnie 100% czasu poświęconego na proces przetwarzania interfejsu użytkownika, aplikacja jest prawdopodobnie responsywna. 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.