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?

O personagem Mario só possui bigode porque quando ele foi criado, em 1981, a resolução de tela dos equipamentos disponíveis não permitia que fosse desenhada uma boca, então os desenvolvedores fizeram o grande bigode para contornar essa limitação tecnológica.


O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.


O console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.


O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.


O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.