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.resumePassando 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.resumePassando 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_sFibras 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
yieldouresume. - 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.nextFibras 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.newjunto comresumeexecuta e continua uma fibra.Fiber.yieldpausa 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.