Na aula anterior, entendemos o papel do Event Loop e como ele organiza a execução do JavaScript.

Agora vamos dar um passo além e responder:

quando existem várias tarefas esperando, quem executa primeiro?

A resposta envolve dois tipos de filas:

  • Microtasks
  • Macrotasks

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Entender o que são microtasks e macrotasks
  • Saber a prioridade entre elas
  • Prever a ordem de execução do código
  • Evitar armadilhas comuns com Promises e timeouts

O modelo completo de execução

Agora o modelo mental fica assim:

  • Call Stack → executa código síncrono
  • Microtask Queue → prioridade alta
  • Macrotask Queue → prioridade menor
  • Event Loop → gerencia tudo
O Event Loop sempre esvazia a fila de microtasks antes de pegar a próxima macrotask.

O que são Macrotasks?

Macrotasks são tarefas “maiores”, como:

  • setTimeout
  • setInterval
  • Eventos do DOM
  • Mensagens de timers

Elas entram na Macrotask Queue.

O que são Microtasks?

Microtasks são tarefas de alta prioridade, como:

  • Promise.then
  • Promise.catch
  • queueMicrotask

Elas entram na Microtask Queue.

Exemplo comparativo

 
  console.log("Início");
  setTimeout(() => 
  {
    console.log("Macrotask");
  }, 0);
  Promise.resolve().then(() => 
  {
    console.log("Microtask");
  });
  console.log("Fim");

Qual será a ordem?

 
  console.log("Início"); // Saída: Início
  console.log("Fim");
  // Saída: Fim
  // Microtasks primeiro
  // Saída: Microtask
  // Depois as macrotasks
  // Saída: Macrotask

Por que a microtask vem antes?

Após o Call Stack ficar vazio:

  • O Event Loop verifica a Microtask Queue
  • Executa todas as microtasks
  • Só então pega a próxima macrotask

Essa regra garante consistência em Promises.

Exemplo com múltiplas microtasks

 
  Promise.resolve().then(() => { console.log("Microtask 1"); });
  Promise.resolve().then(() => 
  {
    console.log("Microtask 2");
  });
  setTimeout(() => 
  {
    console.log("Macrotask");
  }, 0);
 
  Promise.resolve().then(() => 
  { 
    console.log("Microtask 1"); 
  }); // Saída: Microtask 1
  Promise.resolve().then(() => 
  {
    console.log("Microtask 2");
  });
  // Saída: Microtask 2
  setTimeout(() => {
    console.log("Macrotask");
  }, 0);
// Saída: Macrotask

⚠️ Cuidado com loops de microtasks

Criar microtasks continuamente pode bloquear o Event Loop.

 
  function loopMicrotask() 
  { 
    Promise.resolve().then(loopMicrotask); 
  }
  loopMicrotask();
Microtasks infinitas podem impedir macrotasks de rodar.

Regra de ouro

Sempre lembre:

  • Código síncrono → Call Stack
  • Microtasks → prioridade máxima
  • Macrotasks → depois

Resumo da aula para nunca mais esquecer

  • Event Loop coordena a execução
  • Microtasks têm prioridade sobre macrotasks
  • Promises usam microtasks
  • setTimeout usa macrotasks
  • A ordem do console pode ser prevista

Na próxima aula, vamos aplicar tudo isso em exemplos reais com Promises e async/await, consolidando de vez o entendimento da assincronicidade.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.


O primeiro jogo a fazer uso de uma Inteligência Artificial foi o Mouse in the Maze, criado em 1955, na União Soviética. Você pode saber mais sobre ele clicando aqui.


A primeira versão do clássico Mega Man, para Nintendo 8 bits, tem seu recorde de pontos estabelecido em 03/11/2006, por David Archey, que cravou 2.396.700 pontos, terminando o jogo.


Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".


O ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.