Fibers no PHP: o recurso que tornou a programação assíncrona muito mais elegante
Quando as Fibers chegaram ao PHP 8.1, muita gente as enxergou apenas como mais uma novidade da linguagem. Na prática, elas representam uma das mudanças mais importantes na forma como o PHP pode lidar com concorrência.
É comum encontrar comparações entre Fibers e Threads, mas elas resolvem problemas diferentes.
As Threads permitem execução paralela e são gerenciadas pelo sistema operacional. Já as Fibers implementam multitarefa cooperativa: elas executam na mesma thread e só cedem o controle quando chamam explicitamente Fiber::suspend().
Um exemplo simples:
$fiber = new Fiber(function () {
echo "Início\n";
Fiber::suspend();
echo "Fim\n";
});
$fiber->start();
echo "Programa principal\n";
$fiber->resume();
Saída:
Início
Programa principal
Fim
O mais interessante é que, quando uma Fiber é suspensa, o PHP preserva toda a pilha de chamadas (call stack). Quando ela é retomada, a execução continua exatamente do ponto onde havia parado.
Isso permitiu que runtimes assíncronos como Amp e Revolt oferecessem APIs muito mais naturais, sem depender de callbacks aninhados ou de Generators sendo utilizados como corrotinas.
Vale destacar que Fibers, por si só, não tornam o PHP assíncrono.
Elas são apenas o mecanismo que permite suspender e retomar a execução. Para que exista programação assíncrona de fato, ainda é necessário um event loop e bibliotecas que utilizem operações de I/O não bloqueantes.
Na prática, a maioria dos desenvolvedores nunca precisará criar uma "Fiber" manualmente. Mesmo assim, entender seu funcionamento ajuda bastante a compreender como funcionam servidores de alta performance, clientes HTTP assíncronos, WebSockets e o próprio ecossistema moderno do PHP.
Escrevi um artigo aprofundando o assunto, com exemplos, comparações entre Fibers, Generators e Threads, ciclo de vida, comunicação entre Fibers e como frameworks assíncronos utilizam esse recurso.
Artigo completo: https://thiagoandre.dev/pt-br/entendendo-as-fibers-do-php