‫Bem-vindo de volta a este vídeo, vamos dar uma olhada nos tópicos e, portanto, vamos apenas fazer o
‫conceito básico de tópicos, onde você verá como criar um tópico e como criar vários tópicos.
‫Portanto, vamos começar usando a linha certa do console dessa maneira específica.
‫Vou criar vários mundos, por exemplo, quatro deles, e vou dizer olá, mundo
‫um, olá, mundo dois, três e quatro.
‫Então esses são os mundos.
‫Se os executarmos, é claro que precisamos, antes de mais nada, relinar o console.
‫Portanto, o console permanece aberto e ativo.
‫Se os executarmos, o que vai acontecer é muito básico.
‫Então, eles vão imprimir Hello World quatro vezes na tela e temos um mundo um, dois, três
‫e quatro.
‫Tudo bem.
‫Portanto, isso não é nada novo.
‫Já vimos muito isso antes.
‫Existe algo chamado thread, uma classe chamada thread.
‫E se quisermos usá-lo, precisamos usar o namespace de threading.
‫Então, usando o encadeamento de pontos do sistema e é isso.
‫Agora podemos usar threads para que eu possa seguir em frente e usar a classe de thread e, como você pode ver, cria
‫e controla uma thread, define suas prioridades e obtém seu status.
‫Então, o que podemos fazer agora é, por exemplo, usar thread que dorme por um período limitado de tempo.
‫Então, digamos por 1000 milissegundos.
‫Então isso vai fazer é pausar todo o nosso programa ou nosso thread neste caso, a ameaça principal
‫ou a ameaça em que está por um segundo depois de como a palavra um foi impressa na tela.
‫E podemos realmente fazer isso após cada declaração.
‫Então, vou dizer apenas durma por um período específico de tempo.
‫E aí estamos nós.
‫Olá.
‫Somos um, dois, três e quatro.
‫Então, ele para se eu clicar nele.
‫Mas geralmente você pode ver que ele esperou por um segundo e depois desse segundo, imprimiu a próxima coisa.
‫Então, o que ele simplesmente faz, ele realmente pára todo o thread, então suspende a ameaça atual por um número
‫específico ou especificado de milissegundos.
‫Então, isso é algo que você pode fazer se quiser fazer algo depois de um determinado período de tempo.
‫Mas esteja ciente de que isso realmente impede a ameaça principal.
‫Portanto, nada do que terá de fazer terá de ser feito, digamos, no thread de IU pode ser feito.
‫Não estamos usando UI aqui.
‫Estamos usando um aplicativo de console neste caso.
‫Mas se você usar o WP, por exemplo, para ter uma IU e analisar o thread principal por um segundo, isso significa
‫que a IU não responderá por um segundo inteiro.
‫E isso é algo que o usuário não deseja.
‫E isso será um comportamento muito ruim que você não deve fazer.
‫Mas isso geralmente é apenas para você entender o que pode fazer com os tópicos aqui, certo.
‫Portanto, você pode representar uma ameaça por um período específico de tempo.
‫Mas estamos usando apenas um thread.
‫É a principal ameaça.
‫E se você quiser saber mais sobre isso, terá que depurar.
‫E para fazer isso, adicionamos um ponto aqui.
‫Então, apenas para depurar o ponto onde você simplesmente pressiona aquela barra aqui à esquerda, digamos que adicione a linha nove
‫onde o método principal começa, e então você inicia o programa e como você pode ver, nada será exibido porque ele faz
‫uma pausa bem aqui .
‫Então é onde estamos atualmente.
‫É onde está o cursor.
‫E para ver agora as tarefas, precisamos ir para as janelas de depuração e selecionar as ameaças aqui.
‫Ou você pode pressionar o controle de todos os H.
‫Vou abrir tópicos.
‫E como você pode ver, eles estão flutuando para mim agora e eu os posicionarei aqui no lado
‫esquerdo.
‫E agora você pode ver os threads em execução.
‫E no nosso caso, vemos apenas o segmento principal.
‫Portanto, há apenas um segmento e ele tem uma ideia gerenciada de zero.
‫Essa é a nossa principal ameaça e geralmente está fazendo tudo o que está dentro do nosso método principal.
‫Então, se eu for para a próxima etapa.
‫Como você pode ver, ainda estamos no tópico principal e esperamos um segundo, vemos como o mundo, na verdade, se o
‫abrirmos, eles poderão ver.
‫Portanto, agora é um mundo total.
‫Três, dormimos por um segundo e ele espera horas para ir para a próxima etapa, então você pode ter 10 para ir
‫para a próxima etapa.
‫E então ele exibe Helliwell por apenas um segundo depois.
‫Sim, é para isso que todos nós somos.
‫E então essa linha vermelha aparece.
‫Agora, pressionarei algo como Enter ou qualquer outra coisa e aqui e irei para a próxima etapa.
‫E como você pode ver, ainda somos a principal ameaça.
‫E nosso programa fecha, então não há mais ameaça, então isso é bom e tudo, mas essa é apenas nossa principal ameaça e isso é
‫um pouco enfadonho.
‫Queremos ver como criar threads e é para isso que estamos aqui.
‫Portanto, vamos continuar e criar várias ameaças por conta própria, porque o que acontece aqui é que isso é
‫feito sequencialmente.
‫Então, passo a passo, uma linha após a outra.
‫Mas se quisermos fazer as coisas em paralelo, podemos criar nosso próprio encadeamento porque não queremos que ele seja executado
‫no encadeamento principal.
‫Mas queríamos correr em paralelo.
‫Então, o que vou fazer é criar uma nova ameaça aqui.
‫Vou apenas dizer novo, então vou chamá-lo de ameaça.
‫Então, estou apenas usando a cláusula de ameaça aqui.
‫E você precisa de colchetes e colchetes novamente.
‫E depois desses colchetes, o segundo aqui, você usa seno e chaves iguais e maiores.
‫E depois que o colchete aqui fechar, você precisa começar.
‫Então é assim que você inicia um tópico.
‫Então, criei um novo thread e ele começa imediatamente porque estou chamando start aqui.
‫Isso é apenas o método start nos chama o sistema operacional para alterar o estado da instância atual para
‫o estado de thread em execução.
‫Portanto, este thread terá este estado de thread em execução, o que significa que ele simplesmente executará tudo o
‫que estiver entre as chaves.
‫É aí que podemos adicionar nosso código que queremos executar sempre que essa ameaça for chamada.
‫Então, digamos que este tópico aqui seja o nosso tópico um.
‫Então, vou escrever algo como Thread um, thread um CW.
‫E, além disso, vou dormir um segundo.
‫Portanto, durma por 1000 milissegundos, que é um segundo.
‫Então é isso que este tópico vai fazer.
‫E o que vou fazer é posicionar vários tópicos abaixo disso.
‫Então, linha um, dois, três e quatro.
‫Vou renomear esses itens e comentar.
‫Os que tínhamos antes, então o console está alinhado e agora vamos executá-lo.
‫E aí estamos nós, como você pode ver, surgiu tudo ao mesmo tempo, então esperou por um segundo e
‫então todos surgiram ao mesmo tempo.
‫Então, o que estava acontecendo lá?
‫Deixe-me entrar nesse ponto aqui e talvez no ponto.
‫Sim, bem aí.
‫Então, vamos executá-lo novamente.
‫Agora vemos que nosso programa pára bem aqui, então é onde está, mas ao mesmo tempo aqui
‫na janela de thread aqui na parte inferior, você pode ver que já há duas threads abertas e uma thread de trabalho
‫sem nome.
‫E outra ameaça ao trabalhador sem nome também.
‫Portanto, temos essa nova ameaça que já está em execução.
‫E então uma das outras ameaças também é aberta.
‫E, como você pode ver, a principal ameaça também.
‫Portanto, existem três ameaças ao mesmo tempo.
‫Agora, vamos para a próxima etapa.
‫Como você pode ver, nesse ponto, de repente, há quatro ameaças.
‫E, portanto, esse é o quarto que temos aqui.
‫Então, quando o primeiro começou, talvez o segundo já estivesse pronto, mas os outros ainda não estavam
‫prontos.
‫E agora, naquele ponto em que a ameaça atinge mil milissegundos após um milissegundo ou até menos, você
‫pode ver que as outras ameaças já começaram.
‫Portanto, temos quatro threads em execução ao mesmo tempo.
‫Portanto, temos uma solução multi-threading aqui.
‫E se eu fizer a próxima etapa, bem, como você pode ver, as ameaças dois, três e quatro já são exibidas.
‫Mas a ameaça um da linha direita do console, como você pode ver, ainda não foi exibida.
‫Portanto, eles funcionam em paralelo, mas não são perfeitamente precisos, como você pode ver.
‫Portanto, pode haver pequenas diferenças no tempo em que eles precisam ser executados.
‫Então, vou para a próxima etapa como esta estrada aqui.
‫E como você pode ver agora, a ameaça um também terminou.
‫Mesmo com as ameaças.
‫Estão em uma ordem específica aqui, no meu código, eles são iniciados mais ou menos ao mesmo tempo e
‫como você pode ver, não precisa estar na ordem exata como pensamos.
‫Portanto, não será concluído na ordem exata em que os posicionamos aqui.
‫Mas com base na rapidez com que eles poderiam terminar ou executar o que quer que fosse o código.
‫Então pode acontecer que esse código precise de um pouco mais de tempo que aquele ou muito mais que o outro.
‫Então, é isso que você precisa tirar disso para poder trabalhar com ameaças, mas precisa ser muito,
‫muito cuidadoso, porque existem potencialmente várias coisas que podem dar errado.
‫E vou cobrir alguns deles e vou mostrar ou dar a vocês e vou cobrir alguns deles.
‫E vou compartilhar links com você também.
‫Podemos ler muito mais sobre isso.
‫Então essa é a ideia básica de como criar ameaças.
‫Como você pode ver, é assim que você pode configurar as coisas.
‫Portanto, as ameaças geralmente são um pequeno trabalho ou um trabalho executado e você pode executar várias
‫coisas ao mesmo tempo se tiver vários cursos em seu processador.
‫Digamos que você tenha um processador de quatro núcleos e, em seguida, quatro threads ou quatro processadores ao mesmo
‫tempo podem ser executados.
‫Se você tem, digamos, apenas um processador, então apenas um thread ou uma tarefa por vez pode ser executada
‫nunca acontecerá que eles serão executados em paralelo porque este processador faz apenas uma coisa específica
‫por vez.
‫Isso significa que se você sabe que está trabalhando com um processador multicore ou que seu aplicativo será
‫executado em um processador multicore, poderá trabalhar com várias ameaças.
‫Caso contrário, você terá problemas.
‫Mas geralmente como funciona, se você tiver apenas um núcleo, o thread principal será executado.
‫E apenas se a ameaça principal estiver ociosa, ele seguirá em frente e fará outras coisas para não executar outras
‫ameaças.
‫Digamos que você tenha uma IU e nessa IU você apenas exibe as coisas, tem um botão.
‫Então, se você passar o mouse sobre o botão, ele mudará sua aparência, coisas assim.
‫Isso é feito pela ameaça principal.
‫Mas se a ameaça principal não estiver ocupada, as outras ameaças começarão.
‫Portanto, se você tiver algo que deva ser executado em segundo plano, isso será feito sempre que houver ameaça
‫um, a principal ameaça não está ocupada ou ameaças zero na verdade este ano.
‫Então, isso é sobre ameaças.
‫E examinaremos as ameaças um pouco mais, é claro.
‫Mas, geralmente, é isso que eu queria mostrar para você para começar.