Esercizio 1.3: Individuazione dei colli di bottiglia del thread
Prima di iniziare, è necessario aver completato l'Esercizio 1.2 Raccolta dei dati di thread.
Come individuare i colli di bottiglia del thread mediante la vista Thread
Nella vista Thread viene visualizzato lo stato di tutti i thread presenti nell'applicazione e vengono indicati in modo esplicito i conflitti e le condizioni di stallo del thread.
Per trovare i colli di bottiglia:
- In Controllo creazione profili, fare clic con il pulsante destro del mouse sulla risorsa di creazione profili, quindi selezionare Apri con > Vista Thread. Viene visualizzata la vista Thread, simile a quella riportata di seguito:
A questo punto, considerare le frecce verticali tra i thread. La freccia indica che un thread (il thread dal quale parte la freccia) è in attesa di un altro thread (il thread al quale punta la freccia) per rilasciare un blocco.
- Le frecce sono troppo vicine per poter essere facilmente distinte. Per vederle meglio, passare dalla scala dei tempi lineare predefinita a quella non lineare facendo clic sul pulsante Passa alla scala del tempo compressa
. La scala dei tempi compressa comprime i segmenti di tempo durante i quali non si verifica alcuna azione di thread significativa. La visualizzazione è simile a quella riportata di seguito:
- Interpretare la vista Thread come indicato di seguito:
- Notare che subito dopo l'avvio del programma, vengono creati quattro thread philo*. Tutti e quattro i thread vengono eseguiti, sospesi ed eseguiti di nuovo per un breve intervallo di tempo. Al termine del programma, lo stato dei quattro thread diventa In attesa del blocco.
Nota: su alcuni sistemi, lo stato "Sospensione" non è visualizzabile.
- I thread philo* sono in attesa di un blocco da altri thread philo* che a loro volta sono in attesa di un blocco. In questo caso, si presenta una condizione di stallo: il programma raggiunge un impasse e non può continuare.
Nota: è possibile visualizzare informazioni specifiche relative alla richieste di blocco posizionando il cursore sul segmento di thread in attesa di un blocco. Viene visualizzata una descrizione comandi che specifica il nome del blocco ed identifica il thread che detiene il blocco (il "Thread di blocco").
- Informazioni dettagliate sui segmenti di thread sono disponibili nella vista Proprietà. Per visualizzare la vista, selezionare Finestra > Mostra vista > Proprietà. Selezionare un segmento di thread per visualizzarne le proprietà.
A questo punto si comprende il motivo per cui si è verificata la condizione di stallo. Si è pronti quindi per iniziare l'Esercizio 1.4: Risoluzione dei colli di bottiglia del thread.