Hilos verdes - Green threads

En la programación de computadoras , los subprocesos verdes o subprocesos virtuales son subprocesos programados por una biblioteca en tiempo de ejecución o una máquina virtual (VM) en lugar de de forma nativa por el sistema operativo (SO) subyacente . Los subprocesos verdes emulan entornos multiproceso sin depender de ninguna capacidad del sistema operativo nativo, y se administran en el espacio del usuario en lugar del espacio del kernel , lo que les permite trabajar en entornos que no tienen soporte nativo para subprocesos.

Etimología

Los subprocesos verdes se refieren al nombre de la biblioteca de subprocesos original para el lenguaje de programación Java (que se lanzó en la versión 1.1 y luego los subprocesos verdes se abandonaron en la versión 1.3 a los subprocesos nativos). Fue diseñado por The Green Team en Sun Microsystems .

Rendimiento

En un procesador de múltiples núcleos , las implementaciones de subprocesos nativos pueden asignar automáticamente trabajo a múltiples procesadores, mientras que las implementaciones de subprocesos verdes normalmente no pueden. Los subprocesos verdes se pueden iniciar mucho más rápido en algunas máquinas virtuales. En las computadoras monoprocesador, sin embargo, el modelo más eficiente aún no se ha determinado claramente.

Los puntos de referencia en computadoras que ejecutan la versión 2.2 del kernel de Linux (obsoleta durante mucho tiempo) han demostrado que:

Cuando un hilo verde ejecuta una llamada al sistema de bloqueo, no solo se bloquea ese hilo, sino que se bloquean todos los hilos dentro del proceso. Para evitar ese problema, los subprocesos verdes deben usar operaciones de E / S asincrónicas , aunque la mayor complejidad del lado del usuario puede reducirse si la máquina virtual que implementa los subprocesos verdes genera procesos de E / S específicos (ocultos para el usuario) para cada E / S. O operación.

También existen mecanismos que permiten el uso de subprocesos nativos y reducen la sobrecarga de activación y sincronización de subprocesos:

  • Los grupos de subprocesos reducen el costo de generar un nuevo subproceso al reutilizar un número limitado de subprocesos.
  • Los lenguajes que utilizan máquinas virtuales y subprocesos nativos pueden utilizar el análisis de escape para evitar sincronizar bloques de código cuando no sean necesarios.

Hilos verdes en la máquina virtual Java

Implementación original: Green Threads

En Java 1.1 , los subprocesos verdes eran el único modelo de subprocesos utilizado por la máquina virtual Java (JVM), al menos en Solaris . Como los subprocesos verdes tienen algunas limitaciones en comparación con los subprocesos nativos, las versiones posteriores de Java los descartaron en favor de los subprocesos nativos.

Una excepción a esto es la máquina virtual Squawk , que es una mezcla entre un sistema operativo para dispositivos de bajo consumo y una máquina virtual Java. Utiliza hilos verdes para minimizar el uso de código nativo y para admitir la migración de sus aislamientos.

Kilim y Quasar son proyectos de código abierto que implementan hilos verdes en versiones posteriores de la JVM modificando el código de bytes de Java producido por el compilador de Java (Quasar también es compatible con Kotlin y Clojure ).

Implementación futura: Project Loom

Project Loom : los subprocesos virtuales son una alternativa liviana programada en modo de usuario a los subprocesos administrados por el sistema operativo estándar. Los subprocesos virtuales se asignan a los subprocesos del sistema operativo en una relación de varios a varios, en contraste con la relación de varios a uno de la implementación original.

Hilos verdes en otros idiomas

Hay algunos otros lenguajes de programación que implementan equivalentes de hilos verdes en lugar de hilos nativos. Ejemplos:

La máquina virtual Erlang tiene lo que podría llamarse procesos ecológicos : son como los procesos del sistema operativo (no comparten el estado como lo hacen los subprocesos) pero se implementan dentro del Erlang Run Time System (erts). Estos a veces se denominan hilos verdes , pero tienen diferencias significativas con los hilos verdes estándar.

En el caso de GHC Haskell, se produce un cambio de contexto en la primera asignación después de un tiempo de espera configurable. Los subprocesos de GHC también se ejecutan potencialmente en uno o más subprocesos del sistema operativo durante su vida útil (existe una relación de muchos a muchos entre los subprocesos de GHC y los subprocesos del sistema operativo), lo que permite el paralelismo en máquinas de multiprocesamiento simétrico , sin crear subprocesos de SO más costosos de lo necesario para ejecutarse en el número disponible de núcleos.

Occam es inusual en esta lista porque su implementación original se realizó para Transputer y, por lo tanto, no se necesitaba una máquina virtual. Los puertos posteriores a otros procesadores han introducido una máquina virtual modelada en el diseño del Transputer, una opción efectiva debido a los bajos gastos generales involucrados.

La mayoría de las máquinas virtuales Smalltalk no cuentan los pasos de evaluación; sin embargo, la VM aún puede adelantarse al subproceso en ejecución en señales externas (como temporizadores que expiran o E / S disponible). Por lo general , la programación por turnos se utiliza para que un proceso de alta prioridad que se activa con regularidad implemente de manera efectiva la preferencia de tiempo compartido :

 [
    [(Delay forMilliseconds: 50) wait] repeat
 ] forkAt: Processor highIOPriority

Otras implementaciones, por ejemplo, QKS Smalltalk, son siempre de tiempo compartido. A diferencia de la mayoría de las implementaciones de subprocesos ecológicos, QKS también admite la prevención de la inversión de prioridad .

Ver también

Referencias

enlaces externos