FIBERS EN PHP: QUÉ SON Y CÓMO FUNCIONAN

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