2 min. de lectura (aproximado)

Fibers en PHP: qué son y cómo funcionan

(2 min. de lectura) Los fibers en php son una característica introducida en php 8.1 que permiten manejar corutinas, de manera ligera. Son una forma de implementar concurrencia no bloqueante, permitiendo pausar y reanudar la ejecución de una función sin perder su estado, lo que es útil para tareas asíncronas, como manejar múltiples operaciones de entrada/salida sin bloquear el hilo principal.
Los Fibers son una abstracción de bajo nivel para controlar el flujo de ejecución en php y diferencia de los hilos (threads), los fibers son gestionados por el usuario y no por el sistema operativo, lo que los hace más ligeros. Permiten suspender una función en un punto específico y reanudarla más tarde, manteniendo el contexto (variables locales, pila de llamadas, etc.).

Características principales

  • Ligereza: Los fibers consumen menos recursos que los hilos, ya que no requieren un cambio de contexto completo.
  • Control manual: El programador decide cuándo pausar o reanudar un Fiber, a diferencia de las corutinas automáticas en otros lenguajes.
  • No son multitarea real: Los fibers no ejecutan código en paralelo; solo permiten alternar entre tareas dentro del mismo hilo.
  • Compatibilidad con asincronía: Son ideales para integrar con bibliotecas asíncronas como ReactPHP o Amp.

Métodos principales de la clase Fiber

  • Fiber::start(): Inicia el fiber.
  • Fiber::suspend(mixed $value): Pausa el fiber y devuelve un valor al llamador.
  • Fiber::resume(mixed $value): Reanuda el fiber, enviando un valor al punto donde se pausó.
  • Fiber::isStarted(), Fiber::isSuspended(), Fiber::isRunning(), Fiber::isTerminated(): Métodos para verificar el estado del fiber.
  • Fiber::getCurrent(): Devuelve el fiber actualmente en ejecución.
Los fibers en php son una herramienta poderosa para manejar concurrencia cooperativa, especialmente en aplicaciones asíncronas. Aunque no reemplazan a los hilos ni al paralelismo real, son ideales para optimizar tareas de entrada / salida intensivas. Para usarlos eficazmente, es común combinarlos con bibliotecas como Amp o ReactPHP. Si estás desarrollando una aplicación que requiere manejar múltiples conexiones o tareas simultáneamente, los fibers pueden ser una gran solución. Ejemplo:

$fiber = new Fiber(function () {
echo "Inicio del Fiber\n";
$valor = Fiber::suspend("Pausa"); // Pausa la ejecución y devuelve "Pausa"
echo "Reanudado con: $valor\n";
});

echo "Inicio del programa\n";
$resultado = $fiber->start(); // Inicia el Fiber
echo "Fiber pausado, valor recibido: $resultado\n";
$fiber->resume("Valor reanudado"); // Reanuda el Fiber
echo "Fin del programa\n";
//Salida
//Inicio del programa
//Inicio del Fiber
//Fiber pausado, valor recibido: Pausa
//Reanudado con: Valor reanudado
//Fin del programa