Cada núcleo de processamento é também conhecido como core que na verdade é um processador à parte, podendo haver dois, quatro, seis e até oito dessas cores em um único chip de CPU. Este avanço incentivou o desenvolvimento da tecnologia multithread que torna o fluxo de execução de uma aplicação mais eficiente e dinâmico.
O objetivo deste artigo é apresentar o ambiente multithreading, suas qualidades, os problemas que podem advir através do seu uso e as ferramentas que o .NET fornece, juntamente com a linguagem C#, para a criação de aplicações que possam proporcionar uma nova experiência ao usuário.
Para que você possa entender o que é multithread, imagine uma montadora de automóveis. Agora imagine que nesta montadora haja somente um funcionário que seja responsável por planejar os custos, projetar o automóvel, organizar as peças, montar as peças, pintar o automóvel, instalar o motor, realizar a bateria de testes do automóvel e enviar o automóvel para a concessionária.
Quantos automóveis você acha que seriam produzidos por dia? Melhor, por ano? Com certeza não seriam muitos. Através desse cenário de produção surreal é que pode se fazer uma analogia com os processos de software que todos os dias são processados pela CPU.
Mas o que são processos e como são formados? Para que você possa entender melhor como funciona as threads, será importante abordar alguns conceitos básicos de processos e threads.
Processos e threads
Processo é um dos conceitos mais importantes de qualquer sistema operacional, pois representam programas em execução. Eles possuem um código executável, pilha de execução, estado de processo e prioridade do processo que é definida pelo sistema operacional.
Possuem também um valor no registrador Program Counter (PC) e um valor do apontador de pilha Stack Pointer (SP). Com estes recursos, o sistema operacional realiza operações concorrentes entre os processos realizando uma espécie de pseudoparalelismo, onde alterna entre os processos ativos, executando partes de cada um em um intervalo de tempo definido pelas prioridades de cada processo, sendo esta troca denominada troca de contexto ou context switching.
O sistema operacional não se perde porque possui endereços de cada intervalo de execução e dos próximos intervalos que serão executados, armazenados pelo registrador da CPU Program Counter. Os processos também podem ser classificados de acordo com o tipo de tarefa que realizam:
· Processos CPU-bound: Processos CPU-bound passam a maior parte do tempo utilizando recursos do processador para a execução de suas tarefas. Aplicações que realizam muitos cálculos por segundo como jogos ou softwares de informação geográfica precisam de maior poder de processamento e consequentemente possuem maiores prioridades de processamento;
· Processos I/O-bound: Processos I/O-bound não precisam de tanta atenção do processador como os processos CPU-bound, porque utilizam mais o disco em suas tarefas de gravação e leitura de dados.
Geralmente estes processos são bem mais lentos que os processos CPU-bound porque não dependem exclusivamente da CPU, tendo seu gargalo de desempenho nos discos. A tendência é que quanto maior for a velocidade do processador, mais gargalos de processos I/O irão surgir, pois o processador precisará aguardar o disco terminar a maior parte do trabalho para que o processo continue.
Essa diferença de desempenho é mostrada na Figura 1.

Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais