stringtranslate.com

Fibra (informática)

En informática , una fibra es un hilo de ejecución particularmente ligero .

Al igual que los subprocesos, las fibras comparten el espacio de direcciones . Sin embargo, las fibras utilizan multitarea cooperativa , mientras que los subprocesos utilizan multitarea preventiva . Los subprocesos a menudo dependen del programador de subprocesos del núcleo para interrumpir un subproceso ocupado y reanudar otro subproceso; las fibras se ceden para ejecutar otra fibra mientras se ejecutan.

Hilos, fibras y corrutinas

La diferencia clave entre las fibras y los hilos del núcleo es que las fibras utilizan un cambio de contexto cooperativo, en lugar de una segmentación temporal preventiva. En efecto, las fibras amplían la taxonomía de concurrencia:

Las fibras (a veces llamadas corrutinas apiladas o subprocesos programados cooperativamente en modo usuario) y las corrutinas sin pila (máquinas de estados sintetizadas por el compilador) representan dos facilidades de programación distintas con grandes diferencias de rendimiento y funcionalidad. [2]

Ventajas y desventajas

Debido a que las fibras realizan múltiples tareas de manera cooperativa, la seguridad de los subprocesos es un problema menor que con los subprocesos programados de manera preventiva, y las construcciones de sincronización que incluyen bloqueos de giro y operaciones atómicas son innecesarias al escribir código con fibras, ya que están sincronizadas de manera implícita. Sin embargo, muchas bibliotecas producen una fibra de manera implícita como un método para realizar E/S sin bloqueo ; como tal, se recomienda tener cierta precaución y leer la documentación. Una desventaja es que las fibras no pueden utilizar máquinas multiprocesador sin usar también subprocesos preventivos; sin embargo, un modelo de subprocesos M:N sin más subprocesos preventivos que núcleos de CPU puede ser más eficiente que las fibras puras o el subproceso preventivo puro.

En algunos programas de servidor, las fibras se utilizan para bloquearse de forma flexible y permitir que sus programas principales de un solo subproceso sigan funcionando. En este diseño, las fibras se utilizan principalmente para el acceso de E/S que no necesita procesamiento de la CPU. Esto permite que el programa principal continúe con lo que está haciendo. Las fibras ceden el control al programa principal de un solo subproceso y, cuando se completa la operación de E/S, las fibras continúan donde lo dejaron.

Compatibilidad con sistemas operativos

Las fibras requieren menos soporte del sistema operativo que los subprocesos. Se pueden implementar en sistemas Unix modernos utilizando las funciones de biblioteca getcontext, setcontext y swapcontext en ucontext.h, como en GNU Portable Threads , o en ensamblador como boost.fiber.

En Microsoft Windows , las fibras se crean mediante las llamadas ConvertThreadToFibery CreateFiber; una fibra que está suspendida actualmente puede reanudarse en cualquier hilo. El almacenamiento local de la fibra, análogo al almacenamiento local del hilo , puede usarse para crear copias únicas de variables. [3]

El sistema operativo Symbian utilizaba un concepto similar al de las fibras en su Programador activo. Un objeto activo contenía una fibra que el Programador activo debía ejecutar cuando se completaba una de varias llamadas asincrónicas pendientes. Varios objetos activos podían estar esperando para ejecutarse (según la prioridad) y cada uno tenía que restringir su propio tiempo de ejecución.

Ejemplos de implementación de fibra

Las fibras se pueden implementar sin soporte del sistema operativo, aunque algunos sistemas operativos o bibliotecas brindan soporte explícito para ellas.

Véase también

Referencias

  1. ^ Nat Goodspeed, Oliver Kowalke, 22 de mayo de 2014, N4024 Distinguir corrutinas y fibras
  2. ^ Gor Nishanov, 2018-11-20, P1364R0 Fibras bajo la lupa
  3. ^ Fibras, Biblioteca MSDN
  4. ^ CreateFiber, MSDN
  5. ^ Anuncio de lanzamiento de PHP 8.1.0

Enlaces externos