Exercício 1.3: Identificando um Gargalo de Encadeamento
Antes de começar, você deve concluir o Exercício 1.2: Coletando Dados de Encadeamento.
Localizando Gargalos de Encadeamento Utilizando a Visualização Encadeamento
A visualização Encadeamento exibe o status de todos os encadeamentos do aplicativo e indica explicitamente conflitos e contenções de encadeamento.
Para localizar gargalos:
- No Monitor de Criação de Perfis (Profiling Monitor), clique com o botão direito do mouse no recurso de Criação de perfis (Profiling) e, em seguida, selecione Abrir Com > Visualização Encadeamento (Open With > Thread View). A visualização Encadeamento (Thread View) é aberta. Ela é semelhante ao seguinte:
As setas verticais entre os encadeamentos são o que nos interessa. Uma seta indica que um encadeamento (o encadeamento no qual a seta é originada) está aguardando que outro encadeamento (o encadeamento para o qual a seta está apontando) libere uma trava.
- As setas estão muito próximas uma da outra para serem distinguidas facilmente. Para vê-las melhor, alterne a escala de tempo linear padrão para uma escala de tempo com peso clicando no botão Comutar para Escala de Tempo Compactada (Switch to Compressed Time Scale)
. A Escala de Tempo Compactada (Compressed Time Scale) compacta os segmentos de tempo durante o qual não ocorre nenhuma ação significativa de encadeamento. A exibição é alterada para algo semelhante ao seguinte:
- Interprete a visualização Encadeamento (Thread View) da seguinte forma:
- Note que logo após o programa ser iniciado, quatro encadeamentos philo* são criados. Todos eles são executados, depois suspendem e, em seguida, são executados brevemente outra vez. Quando o programa é finalizado, todos eles foram alterados para um estado Aguardando por Trava (Waiting for Lock).
Nota: Um estado "Suspenso" (Sleep) distinto não pode ser exibido em alguns sistemas.
- Os encadeamentos philo* estão aguardando por uma trava de outros encadeamentos philo* que também estão aguardando por uma trava. Neste caso, temos um conflito: O programa atinge um impasse e não pode continuar.
Nota: É possível consultar informações específicas sobre os pedidos de trava pausando o cursor sobre o segmento de encadeamento que está aguardando por uma trava. Isso exibe uma dica de ferramenta que especifica o nome da trava e identifica o encadeamento que está mantendo a trava (o "Encadeamento Travador" (Locking Thread)).
- É possível consultar informações detalhadas sobre os segmentos de encadeamento na visualização Propriedades (Properties). Para exibir a visualização, selecione Janela > Mostrar Visualização > Propriedades (Windows > Show View > Properties). Selecione um segmento de encadeamento para exibir suas propriedades.
Agora você entende porque esse conflito ocorre. Você está pronto para começar o Exercício 1.4: Resolvendo o gargalo de encadeamento.