stringtranslate.com

Concurrencia estructurada

La concurrencia estructurada es un paradigma de programación cuyo objetivo es 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 subprocesos de ejecución concurrentes (que en este caso abarcan subprocesos y procesos del núcleo y del espacio de usuario) mediante construcciones de flujo de control que tienen puntos de entrada y salida claros y que garantizan que todos los subprocesos generados se hayan completado antes de la salida. Dicha encapsulación permite que los errores en subprocesos concurrentes se propaguen al ámbito principal de la estructura de control y sean gestionados por los mecanismos de gestión de errores nativos de cada lenguaje informático en particular. Permite que el flujo de control siga siendo fácilmente evidente por la estructura del código fuente a pesar de la presencia de concurrencia. Para que sea eficaz, este modelo debe aplicarse de forma coherente en todos los niveles del programa; de lo contrario, los subprocesos concurrentes pueden filtrarse, quedar huérfanos o no poder propagar correctamente los errores de tiempo de ejecución.

La concurrencia estructurada es análoga a la programación estructurada , que utiliza construcciones de flujo de control que encapsulan declaraciones secuenciales y subrutinas.

Historia

El modelo de bifurcación y unión de la década de 1960, incorporado por herramientas de multiprocesamiento como OpenMP , es un ejemplo temprano de un sistema que garantiza que todos los subprocesos se hayan completado antes de salir. Sin embargo, Smith sostiene que este modelo no es una verdadera concurrencia estructurada ya que el lenguaje de programación no es consciente del comportamiento de unión y, por lo tanto, no puede aplicar la seguridad. [1]

El concepto fue formulado en 2016 por Martin Sústrik (un desarrollador de ZeroMQ ) con su biblioteca C libdill, con goroutines como punto de partida. [2] Fue refinado aún más en 2017 por Nathaniel J. Smith, quien introdujo un "patrón de vivero" en su implementación de Python llamada Trio. [3] Mientras tanto, Roman Elizarov se le ocurrió de forma independiente las mismas ideas mientras desarrollaba una biblioteca de corrutinas experimental para el lenguaje Kotlin , [4] [5] que luego se convirtió en una biblioteca estándar. [6]

En 2021, Swift adoptó la concurrencia estructurada. [7] Más tarde ese año, se publicó un borrador de propuesta para agregar la concurrencia estructurada a Java . [8]

Variaciones

Un punto importante de variación es cómo se maneja un error en un miembro de un árbol de subprocesos concurrentes. Las implementaciones simples simplemente esperarán hasta que los subprocesos secundarios y hermanos del subproceso que falla se ejecuten por completo antes de propagar el error al ámbito principal. Sin embargo, eso podría llevar una cantidad de tiempo indefinida. La alternativa es emplear un mecanismo de cancelación general (normalmente un esquema cooperativo que permite respetar las invariantes del programa) para terminar los subprocesos secundarios y hermanos de manera conveniente.

Véase también

Referencias

  1. ^ Smith, Nathaniel J. (25 de abril de 2018). «Notas sobre concurrencia estructurada, o: la sentencia Go considerada perjudicial» . Consultado el 1 de agosto de 2019 .
  2. ^ Sústrik, Martin (7 de febrero de 2016). «Structured Concurrency» . Consultado el 1 de agosto de 2019 .
  3. ^ Smith, Nathaniel J. (10 de marzo de 2017). "Announcing Trio" (Anunciando el trío) . Consultado el 23 de septiembre de 2022 .
  4. ^ Elizarov, Roman (12 de septiembre de 2018). «Structured concurrency» (Concurrencia estructurada) . Consultado el 21 de septiembre de 2019 .
  5. ^ Elizarov, Roman (11 de julio de 2019). Concurrencia estructurada (video). Conferencia sobre computación distribuida Hydra. 42 minutos en . Consultado el 21 de septiembre de 2019 . Necesitábamos un nombre y necesitábamos finalizar todo este concepto [...] y nos topamos con esta publicación de blog [...] de Nathaniel J. Smith.
  6. ^ "Conceptos básicos de corrutinas: concurrencia estructurada". Kotlin . JetBrains . Consultado el 3 de marzo de 2022 .
  7. ^ 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 .
  8. ^ Pressler, Ron. "Borrador de JEP: Concurrencia estructurada (Incubadora)". OpenJDK . Oracle . Consultado el 3 de marzo de 2022 .

Enlaces externos