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
- 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.
$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