Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida funcionamento da Thread.Sleep

Senhores, boa tarde!

Eu entendi que o Sleep da Thread faz ela parar por X tempo, mas não ficou claro se ela também faz uma pausa no processamento, no caso das contas.

Afinal, ela pausa ou não o processamento das contas?

Acredito que a resposta seja não, mas caso for sim, deveria demorar mais o processamento, não?

1 resposta
solução!

Alura PD, bom dia!

No projeto desenvolvido durante o curso, criamos algumas threads trabalhadoras dedicadas ao processamento das contas. Em nosso código, estas threads nunca chamam o método estático Thread::Static(int), deste modo, o processamento em cada thread acontece sem pausas.

--

Nós usamos o método Thread::Static(int) na thread principal - a responsável pela interface gráfica, interação do usuário com os controles/botões/janela do WPF.

A razão de darmos uma pausa na thread principal foi porque precisávamos esperar as threads trabalhadoras terminarem o processamento (I):

while (thread_processamento.IsAlive()) {
    Thread.Sleep(250);
}

Outra alternativa (II) seria não fazer nada, dentro deste laço de repetição:

while (thread_processamento.IsAlive()) {
    //Faz nada
}

Nenhuma destas alternativas interferem diretamente no processamento das contas, afinal, estamos lidando apenas com a Thread principal, não é mesmo?

Analisando superficialmente, podemos dizer apenas que em (I) o usuário poderia ter a impressão de que o processamento demorou um pouco mais, porque a thread principal estava dormindo enquanto a thread_processamento terminou seu trabalho (um lag de, no máximo, 250ms).

Acontece que perceberemos, em geral, que o desempenho do código em (I) é maior do que o código em (II). Isso ocorre porque o código thread_processamento.IsAlive() exige uso da CPU e, dentro de um laço while, temos um uso bastante intenso da CPU. Independente do número de Threads que nossa aplicação usa, o sistema operacional ainda precisa administrar todas estas Threads e executar cada uma delas, então o nosso código intensivo de verificar o estado da thread_processamento causa um problema de performance e gera um atraso no processamento de todas as outras threads de nossa aplicação.