Event Loop Part 1

Event Loop Part 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.

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.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *