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:

  1. 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:

    Captura de tela da visualização Encadeamento mostrando os resultados dessa execução de criação de perfil, conforme descrito no texto a seguir.

    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.

  2. 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:

    Captura de tela mostrando a distribuição das setas após a escala de tempo ser alterada para 'Compactada'.

  3. Interprete a visualização Encadeamento (Thread View) da seguinte forma:
    1. 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.
    2. 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)).
  4. É 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.

Termos de uso | Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.