0Pricing
Ruby Academy · Aula

Fibras

Concorrência cooperativa.

Fibras é uma aula grátis de Ruby Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Ruby Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ruby Academy inclui 4 aulas no total.

O que é uma fibra?

Uma fibra é uma unidade leve de execução que você controla manualmente. Ao contrário das linhas de execução, uma fibra nunca é executada por conta própria: você entrega explicitamente o controle a ela, e ela o devolve.

  • Isso é chamado de concorrência cooperativa.
  • É barato criar e pausar fibras.
  • Elas são a base dos geradores e da E/S assíncrona no Ruby.

Criando e retomando

Crie uma fibra com Fiber.new e inicie-a ou continue-a com resume. O bloco é executado até terminar ou ser pausado.

fiber = Fiber.new do
  puts "Inside the fiber"
end

fiber.resume
puts "Back in main"

Pausando e devolvendo o controle

Fiber.yield pausa a fibra e devolve o controle a quem chamou resume. O próximo resume continua a execução logo depois da pausa.

fiber = Fiber.new do
  puts "Step 1"
  Fiber.yield
  puts "Step 2"
end

fiber.resume
puts "Main between steps"
fiber.resume

Passando valores para fora

O argumento de Fiber.yield se torna o valor retornado por resume. Isso permite que uma fibra produza uma sequência de valores sob demanda.

fiber = Fiber.new do
  Fiber.yield 10
  Fiber.yield 20
  30
end

puts fiber.resume
puts fiber.resume
puts fiber.resume

Passando valores para dentro

O argumento de resume se torna o valor retornado por Fiber.yield dentro da fibra. A comunicação flui nos dois sentidos.

fiber = Fiber.new do
  got = Fiber.yield "ready"
  puts "Fiber received: " + got
end

puts fiber.resume
fiber.resume("hello")

Um contador infinito

Como uma fibra pode ser pausada e retomada, ela consegue representar uma sequência preguiçosa infinita sem nunca calcular tudo de uma vez.

counter = Fiber.new do
  n = 1
  loop do
    Fiber.yield n
    n += 1
  end
end

3.times { puts counter.resume }

Verificando se está ativa

Fiber#alive? informa se a fibra ainda pode ser retomada. Retomar uma fibra encerrada lança um FiberError.

fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_s

Fibras vs. linhas de execução

Principais diferenças:

  • As linhas de execução são agendadas pelo ambiente de execução; as fibras são agendadas por você.
  • As linhas de execução podem ser interrompidas a qualquer momento; as fibras só alternam em yield ou resume.
  • As fibras evitam condições de corrida porque apenas uma é executada e os pontos de alternância são explícitos.

Enumeradores usam fibras

Os enumeradores preguiçosos do Ruby são baseados em fibras. Um iterador externo pausa entre os valores, assim como uma fibra devolve o controle.

enum = Enumerator.new do |y|
  y << 1
  y << 2
  y << 3
end

puts enum.next
puts enum.next

Fibras e E/S assíncrona

O Ruby moderno inclui um mecanismo de integração de agendamento de fibras. Bibliotecas como o pacote async usam esse mecanismo para que, quando uma fibra espera por E/S, o agendador retome outra fibra automaticamente.

Isso proporciona E/S com alta concorrência usando um código que se parece com um código sequencial comum.

Quando usar fibras

Use fibras quando precisar de:

  • Geradores preguiçosos que produzam valores sob demanda.
  • Fluxo de controle no estilo de corrotinas.
  • Alternância detalhada e determinística sem bloqueios.

Para a maioria dos casos comuns de concorrência, as linhas de execução ou o pacote async (que usa fibras internamente) são mais fáceis.

Verificação rápida

Teste sua compreensão sobre as fibras.

Recapitulação: fibras

Você aprendeu sobre concorrência cooperativa com fibras:

  • Fiber.new junto com resume executa e continua uma fibra.
  • Fiber.yield pausa e devolve o controle.
  • Os valores fluem nos dois sentidos por meio dos argumentos de pausa e retomada.
  • As fibras permitem criar enumeradores e agendadores de E/S assíncrona.

A seguir: os atores, que finalmente oferecem paralelismo real.

Perguntas Frequentes

A aula “Fibras” é grátis?

Sim — o texto completo de “Fibras” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Ruby Academy, atualize para CoddyKit PRO. O curso de Ruby Academy inclui 4 aulas no total.

O que vou aprender em “Fibras”?

Concorrência cooperativa. Você pratica Ruby Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Ruby Academy?

Nenhuma experiência prévia é necessária. Ruby Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Fibras”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Ruby Academy?

Sim. Cada aula de Ruby Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Threads
  2. O GVL explicado
  3. Fibras
  4. Ractors
← Voltar para Ruby Academy