La concurrencia estructurada es un paradigma de programación que tiene como objetivo mejorar la claridad, la calidad y el tiempo de desarrollo de un programa informático mediante el uso de un enfoque estructurado para la programación concurrente .
El concepto central es la encapsulación de hilos de ejecución concurrentes (que incluyen hilos y procesos del kernel y del espacio de usuario) mediante estructuras de flujo de control con puntos de entrada y salida definidos, que garantizan que todos los hilos generados finalicen antes de su salida. Esta encapsulación permite que los errores en los hilos concurrentes se propaguen al ámbito principal de la estructura de control y sean gestionados por los mecanismos nativos de manejo de errores de cada lenguaje de programación. De esta forma, el flujo de control permanece fácilmente visible en la estructura del código fuente, a pesar de la presencia de concurrencia. Para que sea efectivo, este modelo debe aplicarse de forma consistente en todos los niveles del programa ; de lo contrario, los hilos concurrentes podrían filtrarse, quedar huérfanos o no propagarse correctamente los errores en tiempo de ejecución.
La concurrencia estructurada es análoga a la programación estructurada , que utiliza estructuras de flujo de control que encapsulan instrucciones y subrutinas secuenciales.
Historia
El modelo fork-join de la década de 1960, implementado en herramientas de multiprocesamiento como OpenMP , es un ejemplo temprano de un sistema que garantiza que todos los hilos se hayan completado antes de finalizar. Sin embargo, Smith argumenta que este modelo no constituye una verdadera concurrencia estructurada, ya que el lenguaje de programación desconoce el comportamiento de unión y, por lo tanto, no puede garantizar la seguridad. [ 1 ]
El concepto fue formulado en 2016 por Martin Sústrik (un desarrollador de ZeroMQ ) con su biblioteca C libdill, tomando como punto de partida las goroutines . [ 2 ] Fue perfeccionado en 2017 por Nathaniel J. Smith, quien introdujo un "patrón de guardería" en su implementación en Python llamada Trio. [ 3 ] Mientras tanto, Roman Elizarov llegó de forma independiente a las mismas ideas mientras desarrollaba una biblioteca experimental de corrutinas para el lenguaje Kotlin , [ 4 ] [ 5 ] que posteriormente se convirtió en una biblioteca estándar. [ 6 ]
En 2021, Swift adoptó la concurrencia estructurada. [ 7 ] Más tarde ese mismo año, se publicó un borrador de propuesta para agregar concurrencia estructurada a Java . [ 8 ]
Variaciones
Un punto clave de variación radica en cómo se gestiona un error en un miembro de un árbol de hilos concurrentes. Las implementaciones sencillas simplemente esperan a que los hilos hijos y hermanos del hilo que falla se ejecuten por completo antes de propagar el error al ámbito padre. Sin embargo, esto podría llevar un tiempo indefinido. La alternativa consiste en emplear un mecanismo de cancelación general (normalmente un esquema cooperativo que permite respetar las invariantes del programa) para finalizar los hilos hijos y hermanos de forma rápida.
Véase también
Referencias
- ↑ Smith, Nathaniel J. (25 de abril de 2018). "Notas sobre concurrencia estructurada, o: la sentencia Go considerada perjudicial" . Recuperado el 1 de agosto de 2019 .
- ↑ Sústrik, Martin (7 de febrero de 2016). "Concurrencia estructurada" . Recuperado el 20 de octubre de 2025 .
- ↑ Smith, Nathaniel J. (10 de marzo de 2017). "Anuncio de Trio" . Recuperado el 23 de septiembre de 2022 .
- ↑ Elizarov, Roman (12 de septiembre de 2018). "Concurrencia estructurada" . Recuperado el 21 de septiembre de 2019 .
- ↑ Elizarov, Roman (11 de julio de 2019). Concurrencia estructurada (Vídeo). Conferencia de computación distribuida Hydra. 42 minutos en . Recuperado el 21 de septiembre de 2019 .
Necesitábamos un nombre y necesitábamos finalizar todo este concepto [...] y nos topamos con esta entrada de blog [...] de Nathaniel J. Smith.
- ↑ "Conceptos básicos de corrutinas: concurrencia estructurada" . Kotlin . JetBrains . Consultado el 3 de marzo de 2022 .
- ↑ McCall, John; Groff, Joe; Gregor, Doug; Malawski, Konrad. "Propuesta de concurrencia estructurada de Swift" . Repositorio Swift Evolution de Apple . GitHub . Consultado el 3 de marzo de 2022 .
- ↑ Pressler, Ron. "Borrador de JEP: Concurrencia estructurada (Incubadora)" . OpenJDK . Oracle . Consultado el 3 de marzo de 2022 .
Enlaces externos
- Notas sobre concurrencia estructurada, o: La instrucción Go considerada perjudicial por Nathaniel J. Smith
- Foro de concurrencia estructurada , debate multilingüe sobre concurrencia estructurada con la participación de Sústrik, Smith y Elizarov.
- FOSDEM 2019: Concurrencia Estructurada , charla relámpago de Martin Sustrik con enlaces a algunas implementaciones.
- paradigmas de programación
- Computación concurrente