DEV Community

Enzo Lanze
Enzo Lanze

Posted on • Updated on

Event Loop - Parte 1

O que é o Event looping?

Event Looping usa uma estrutura de dados chamada Queue, pense na queue como quando você vai a um drive-thru, você entra em uma fila de carros até ser atendido, ou seja, o primeiro a chegar é o primeiro a sair, certo? Isso chamamos de FIFO (First-in-first-out). O Dart usa as queue para agendar as tarefas e executá-las em sua isolate principal. O event loop tem 2 queues, uma para eventos e outra para microtasks.

A queue de eventos é usada para eventos quando você toca em alguma parte da tela ou quando você tem dados vindo de um servidor. Segue a imagem abaixo.
Imagem das queues

Como pode ser visto, nossa queue de microtask é sempre a prioridade dentro do event loop.

Tarefas síncronas na nossa isolate principal são sempre executadas imediatamente. Você não pode interrompê-las.

Se o Dart achar qualquer tarefa longa que concorde em ser adiada, Dart irá colocá-la na queue de eventos.

Quando o Dart termina de executar uma tarefa síncrona, o event loop checa a queue de microtask. Se a tarefa de microtask tiver alguma tarefa, o event loop as coloca na thread principal para executá-las. O event loop fica checando a queue de microtask até ela estar vazia.

Se uma tarefa síncrona e uma queue de microtask estiverem ambas vazias, o event loop deixará a próxima tarefa em espera para a event queue executar na thread principal. Uma vez na event queue, o código é executado de forma síncrona.

Se novas microtasks entrarem na queue de microtask, o event loop irá lidar com elas antes do próximo evento na fila de queues.

Esse processo continuará até que todas as queues estejam vazias.

event-looping

  • Link da documentação do Dart em chinês para mais exemplos com event loop. https://dart.cn/articles/archive/event-loop
  • em resumo de toda essa explicação é que temos as queues de tarefas normais que podem ser adiadas e a de microtask, a de microtask sempre vai ser prioridade para o Event loop. Se você vem de uma linguagem como javascript usando Node.JS saiba que o event loop de la é bem parecido com o do Dart.

Essa foi a primeira parte do conteúdo sobre event loop, em breve irei trazer a segunda parte e com mais exemplos em código mesmo. Por enquanto, é mais uma teoria de como funciona. Espero vocês na segunda parte.

Top comments (0)