¿Hay alguna diferencia entre las fibras, las corutinas y los hilos verdes y, si es así, qué es?

57

Hoy estaba leyendo varios artículos en Internet sobre fibras, corutinas e hilos verdes, y parece que estos conceptos tienen mucho en común, pero hay ligeras diferencias, especialmente cuando hablamos de fibras y corutinas.

¿Existe un resumen conciso y correcto de lo que los hace diferentes entre sí?

Actualización: Encuentro que el documento Distinguir corutinas y fibras (borrador N4024 C ++) es particularmente bueno para diferenciar entre fibras y corutinas.

DejanLekic
fuente

Respuestas:

106

Una fibra es un hilo ligero que utiliza la multitarea cooperativa en lugar de la multitarea preventiva. Una fibra en ejecución debe "ceder" explícitamente para permitir que se ejecute otra fibra, lo que hace que su implementación sea mucho más fácil que los hilos del núcleo o del usuario.

Una corutina es un componente que generaliza una subrutina para permitir múltiples puntos de entrada para suspender y reanudar la ejecución en ciertos lugares. A diferencia de las subrutinas, las corutinas pueden salir llamando a otras corutinas, que luego pueden volver al punto en el que fueron invocadas en la rutina original.

Un hilo verde es un hilo programado por una máquina virtual (VM) en lugar de hacerlo de forma nativa por el sistema operativo subyacente. Los subprocesos verdes emulan entornos de subprocesos múltiples sin depender de las capacidades nativas del sistema operativo, y se administran en el espacio del usuario en lugar del espacio del núcleo, lo que les permite trabajar en entornos que no tienen soporte de subprocesos nativos.

Robert Harvey
fuente
13
Solo puedo decir por mí mismo: esta respuesta es muy valiosa para mí. Comparto opinión con Robert sobre esto.
DejanLekic
"Los resúmenes de temas generales son la especialidad de Wikipedia, que está enfocada y optimizada para proporcionar este contenido y fomentar una cultura orientada a él. Las personas que deseen, que tengan la mejor capacidad y experiencia para proporcionar dichos resúmenes van a Wikipedia, no a Stack Exchange ... A las personas que buscan esto en el motor de búsqueda se les presentarán dos ejemplos de contenido directamente competidores, uno en la red SE y otro en Wikipedia ... Debido a las razones mencionadas anteriormente, es muy probable que el contenido SE parezca inferior en comparación ... "
mosquito
Tenga en cuenta que las corutinas y las fibras podrían considerarse muy estrechamente relacionadas, posiblemente incluso lo mismo. Si se deseaban corutinas, se pueden implementar a través de fibras con muy poco esfuerzo, y viceversa.
cHao
99
No explica cómo son diferentes. Todas estas definiciones parecen bastante equivalentes.
hasen
1
@gstackoverflow: los subprocesos de Java son subprocesos del sistema operativo. La JVM los programa a través del sistema operativo.
Robert Harvey