Übung 1.3: Thread-Engpass feststellen
Bevor Sie mit dieser Übung beginnen, sollten Sie Übung 1.2: Thread-Daten sammeln ausgeführt haben.
Thread-Engpässe in der Thread-Ansicht suchen
Die Thread-Ansicht zeigt den Status aller Threads in Ihrer Anwendung an und weist explizit auf gegenseitige Thread-Sperren und Thread-Konkurrenzsituationen hin.
Gehen Sie für die Suche nach Engpässen wie folgt vor:
- Klicken Sie im Monitor für Profilerstellung mit der rechten Maustaste auf die Profilerstellungsressource
und wählen Sie Öffnen mit > Thread-Ansicht aus. Daraufhin wird die Thread-Ansicht geöffnet. Sie sieht in etwa wie folgt aus:
Die vertikalen Pfeile zwischen den Threads sind für uns von Interesse. Ein Pfeil zeigt an, dass ein Thread (bei dem der Pfeil beginnt) darauf wartet, dass ein
anderer Thread (auf den der Pfeil zeigt) eine Sperre freigibt.
- Die Pfeile sind zu nahe beieinander, so dass sie nicht leicht auseinandergehalten werden können. Sie können sie besser erkennen,
wenn Sie von der linearen Standardzeitskala auf eine differenzierte Zeitskala umschalten.
Klicken Sie dazu auf den Knopf 'Umschalten auf komprimierte
Zeitskala'
. Bei Verwendung der komprimierten Zeitskala werden die Zeitsegmente ohne signifikante Thread-Aktionen
komprimiert. Die Anzeige ändert sich und sieht etwa wie folgt aus:
- Die Thread-Ansicht wird wie folgt interpretiert:
- Kurz nach dem Start des Programms werden vier philo*-Threads erstellt. Alle vier werden ausgeführt, sind dann inaktiv und anschließen kurz wieder aktiv. Bei Beendigung des Programms haben alle vier Threads den Status Wartet auf Sperre.
Anmerkung: Auf manchen Systemen kann der Status "Ruht" nicht angezeigt werden.
- Die philo*-Threads warten auf eine Sperre von anderen philo*-Threads, die
ihrerseits ebenfalls auf eine Sperre warten. In diesem Fall haben wir eine gegenseitige Sperre. Das Programm ist blockiert und kann nicht weiter ausgeführt werden.
Anmerkung: Wenn Sie den Cursor auf das Thread-Segment bewegen, das auf eine Sperre wartet, werden spezifische Informationen zu Sperranforderungen angezeigt. Die Kurzinfo gibt den Namen der Sperre an sowie den Thread, der die Sperre hält (den "sperrenden Thread").
- In der Merkmalansicht sehen Sie detaillierte Informationen zu den Thread-Segmenten. Wählen Sie zum Aufrufen dieser Ansicht
Fenster > Sicht anzeigen > Eigenschaften aus. Wählen Sie das Thread-Segment aus, dessen Merkmale Sie anzeigen möchten.
Jetzt wissen Sie, wie es zu dieser gegenseitigen Sperre kommt. Sie können mit Übung 1.4: Thread-Engpass auflösen beginnen.