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 Thread View (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 Profiling Monitor (Monitor de Traçado de Perfil), clique com o botão direito do mouse no recurso Profiling (Traçado de Perfil) e, em seguida, clique em Open With (Abrir com) > Thread View (Visualização Encadeamento). A Thread View (Visualização Encadeamento) é 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. Uma seta dupla indica que dois encadeamentos estão em um   estado de conflito, um aguardando o outro ser liberado do bloqueio.

  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:

    Logo após a inicialização do programa, quatro encadeamentos philo* serão criados, um depois do outro. Cada encadeamento é executado por um curto período e, em seguida, solicita um bloqueio. Os pedidos não são bem-sucedidos. Quando os primeiros três pedidos de bloqueio falham, os encadeamentos entram em um estado Waiting for Lock (Aguardando Bloqueio). Quando o pedido de bloqueio para o quarto encadeamento falha, ocorre um conflito, e o vídeo indica que todos os quatro encadeamentos estão em um estado Deadlocked (Conflitante).

    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 visualizar informações específicas sobre os pedidos de bloqueio, conflitos e outros estados, pausando o cursor sobre um determinado segmento de encadeamento. Isso exibe uma dica de ferramenta que especifica, por exemplo,  o nome de um bloqueio e identifica o encadeamento que está mantendo o bloqueio (o "Locking Thread (Encadeamento de Bloqueio)").

  4. Também é possível visualizar informações detalhadas sobre os segmentos de encadeamento na visualização Properties (Propriedades). Para exibir a visualização, selecione Window (Janela) > Show View (Mostrar Visualização) > Properties (Propriedades). Selecione um segmento de encadeamento para exibir suas propriedades.

Agora que compreendeu porque ocorre um conflito, você está pronto para começar Exercício 1.4: Resolvendo o gargalo de encadeamento.

Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.