Corrotinas (Coroutines)

Definição

Corrotinas são funções especiais que podem pausar e retomar sua execução em pontos definidos, mantendo seu estado interno entre chamadas.
Diferente das funções tradicionais, corrotinas não precisam terminar para retornar — elas podem entregar valores parciais, suspender a execução e continuar de onde pararam.

Elas são usadas para estruturar código assíncrono ou sequencial de forma não bloqueante, sendo a base para mecanismos como async/await.

Objetivos do uso de Corrotinas

  • Pausar e retomar execuções de forma eficiente e controlada.
  • Evitar bloqueios em operações de I/O e redes.
  • Manter o estado da função entre chamadas.
  • Facilitar o controle de fluxo assíncrono e reativo, com código mais claro e sequencial.

Exemplo prático: corrotina com yield

def gerador():
    yield "passo 1"
    yield "passo 2"
    yield "fim"

for valor in gerador():
    print("Recebido:", valor)

Saída esperada

Recebido: passo 1
Recebido: passo 2
Recebido: fim
  • A execução pausa em cada yield.

  • O gerador mantém seu estado interno até o próximo passo.

Esse tipo de corrotina, com yield, é chamada de gerador. Ela é útil quando se quer produzir uma sequência de valores sob demanda, sem manter tudo na memória.

Exemplo prático com async def

import asyncio

async def saudacao():
    await asyncio.sleep(1)
    return "Olá após 1 segundo"

async def main():
    resultado = await saudacao()
    print(resultado)

asyncio.run(main())

Saída esperada

Olá após 1 segundo
  • async def cria uma corrotina assíncrona.

  • await suspende a execução até que a tarefa seja concluída.

  • O estado da função é preservado enquanto ela "espera".

O ciclo de uma corrotina

[Chamada da corrotina]
    ↓
[Executa até `yield` ou `await`]
    ↓
[Pausa e retorna ao chamador]
    ↓
[Retomada posterior → continua do ponto exato]

Linguagens que usam corrotinas

  • Python: com async def, await, yield
  • Kotlin: coroutines com suspend functions
  • Lua: coroutine.create(), coroutine.yield()
  • C++: suporte a corrotinas nativas com co_await, co_yield
  • C#: base do async/await são state machines geradas a partir de corrotinas

ℹ️ Corrotinas são especialmente poderosas para fluxos de dados contínuos, processamento incremental e programação assíncrona estruturada.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com