Articulo de referencia

Concurrencia (informática)

En informática , la concurrencia se refiere a la capacidad de un sistema para ejecutar múltiples tareas mediante ejecución simultánea o tiempo compartido (cambio de contexto), c...

En informática , la concurrencia se refiere a la capacidad de un sistema para ejecutar múltiples tareas mediante ejecución simultánea o tiempo compartido (cambio de contexto), compartiendo recursos y gestionando interacciones. La concurrencia mejora la capacidad de respuesta, el rendimiento y la escalabilidad en la computación moderna, incluyendo: [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]

La concurrencia es un concepto más amplio que abarca varias ideas relacionadas, entre ellas: [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]

  • Paralelismo (ejecución simultánea en múltiples unidades de procesamiento). El paralelismo ejecuta tareas de forma independiente en múltiples núcleos de CPU. La concurrencia permite múltiples hilos de control a nivel de programa, que pueden usar paralelismo o división de tiempo para realizar estas tareas. Los programas pueden presentar solo paralelismo, solo concurrencia, tanto paralelismo como concurrencia, o ninguno. [ 6 ]
  • Multihilo y multiprocesamiento (recursos del sistema compartidos)
  • Sincronización (coordinación del acceso a recursos compartidos)
  • Coordinación (gestión de las interacciones entre tareas simultáneas)
  • Control de concurrencia (garantizando la coherencia e integridad de los datos)
  • Comunicación entre procesos (IPC, que facilita el intercambio de información)

Asuntos

Debido a que los cálculos en un sistema concurrente pueden interactuar entre sí durante su ejecución, el número de posibles rutas de ejecución en el sistema puede ser extremadamente grande, y el resultado resultante puede ser indeterminado . El uso concurrente de recursos compartidos puede ser una fuente de indeterminación, lo que lleva a problemas como interbloqueos y escasez de recursos . [ 7 ]

El diseño de sistemas concurrentes a menudo implica encontrar técnicas confiables para coordinar su ejecución, intercambio de datos, asignación de memoria y planificación de la ejecución para minimizar el tiempo de respuesta y maximizar el rendimiento . [ 8 ]

Teoría

La teoría de la concurrencia ha sido un campo de investigación activo en la informática teórica . Una de las primeras propuestas fue el trabajo fundamental de Carl Adam Petri sobre redes de Petri a principios de la década de 1960. Desde entonces, se han desarrollado diversos formalismos para modelar y razonar sobre la concurrencia.

Modelos

Se han desarrollado varios formalismos para modelar y comprender sistemas concurrentes, entre ellos: [ 9 ]

Algunos de estos modelos de concurrencia están diseñados principalmente para facilitar el razonamiento y la especificación, mientras que otros pueden utilizarse a lo largo de todo el ciclo de desarrollo, incluyendo el diseño, la implementación, la demostración, las pruebas y la simulación de sistemas concurrentes. Algunos se basan en el paso de mensajes , mientras que otros emplean mecanismos de concurrencia diferentes.

La proliferación de diferentes modelos de concurrencia ha motivado a algunos investigadores a desarrollar formas de unificar estos diferentes modelos teóricos. Por ejemplo, Lee y Sangiovanni-Vincentelli han demostrado que un modelo denominado "señal etiquetada" puede utilizarse para proporcionar un marco común para definir la semántica denotacional de diversos modelos de concurrencia, [ 11 ] mientras que Nielsen, Sassone y Winskel han demostrado que la teoría de categorías puede utilizarse para proporcionar una comprensión unificada similar de diferentes modelos. [ 12 ]

El Teorema de Representación de Concurrencia en el modelo de actor proporciona una forma bastante general de representar sistemas concurrentes que son cerrados en el sentido de que no reciben comunicaciones del exterior. (Otros sistemas concurrentes, por ejemplo, cálculos de procesos, pueden modelarse en el modelo de actor utilizando un protocolo de confirmación de dos fases . [ 13 ] ) La denotación matemática denotada por un sistema cerrado S se construye aproximaciones cada vez mejores a partir de un comportamiento inicial llamado S utilizando una progresión de función de aproximación de comportamiento S para construir una denotación (significado) para S de la siguiente manera: [ 14 ]

Denotemos S ≡ ⊔ i∈ω progresión S i (⊥ S )

De esta forma, S puede caracterizarse matemáticamente en términos de todos sus posibles comportamientos.

Lógicas

Se pueden utilizar diversos tipos de lógica temporal [ 15 ] para ayudar a razonar sobre sistemas concurrentes. Algunas de estas lógicas, como la lógica temporal lineal y la lógica de árbol de computación , permiten realizar afirmaciones sobre las secuencias de estados por las que puede pasar un sistema concurrente. Otras, como la lógica de árbol de computación de acciones , la lógica de Hennessy-Milner y la lógica temporal de acciones de Lamport , construyen sus afirmaciones a partir de secuencias de acciones (cambios de estado). La principal aplicación de estas lógicas radica en la redacción de especificaciones para sistemas concurrentes. [ 7 ]

Práctica

La programación concurrente abarca los lenguajes de programación y los algoritmos utilizados para implementar sistemas concurrentes. Generalmente se considera que la programación concurrente es más general que la programación paralela, ya que puede implicar patrones de comunicación e interacción arbitrarios y dinámicos, mientras que los sistemas paralelos suelen tener un patrón de comunicación predefinido y bien estructurado. Los objetivos básicos de la programación concurrente incluyen la corrección , el rendimiento y la robustez . Los sistemas concurrentes, como los sistemas operativos y los sistemas de gestión de bases de datos, generalmente están diseñados para operar indefinidamente, incluyendo la recuperación automática ante fallos, y no terminan inesperadamente (véase Control de concurrencia ). Algunos sistemas concurrentes implementan una forma de concurrencia transparente, en la que las entidades computacionales concurrentes pueden competir por un único recurso y compartirlo, pero las complejidades de esta competencia y compartición se ocultan al programador.

Debido a que utilizan recursos compartidos, los sistemas concurrentes generalmente requieren la inclusión de algún tipo de árbitro en su implementación (a menudo en el hardware subyacente) para controlar el acceso a dichos recursos. El uso de árbitros introduce la posibilidad de indeterminación en la computación concurrente , lo cual tiene importantes implicaciones prácticas, incluyendo la corrección y el rendimiento. Por ejemplo, el arbitraje introduce un no determinismo ilimitado que plantea problemas con la verificación de modelos, ya que provoca una explosión en el espacio de estados e incluso puede hacer que los modelos tengan un número infinito de estados.

Algunos modelos de programación concurrente incluyen coprocesos y concurrencia determinista . En estos modelos, los hilos de control ceden explícitamente sus intervalos de tiempo, ya sea al sistema o a otro proceso.

Véase también

Referencias

  1. 1 2 Conceptos de sistemas operativos . Wiley. 29 de julio de 2008. ISBN 978-0470128725.
  2. 1 2 Organización y diseño de computadoras: La interfaz hardware/software . Serie Morgan Kaufmann de arquitectura y diseño de computadoras. Morgan Kaufmann. 2012. ISBN 978-0123747501.
  3. 1 2 Sistemas distribuidos: conceptos y diseño . Pearson. 2012. ISBN 978-0132143011.
  4. 1 2 Quinn, Michael Jay (1994). Computación paralela: teoría y práctica . McGraw-Hill. ISBN 978-0070512948.
  5. 1 2 Zomaya, Albert Y. (1996). Manual de computación paralela y distribuida . McGraw Hill Professional. ISBN 978-0070730205.
  6. Programación paralela y concurrente en Haskell . O'Reilly Media. 2013. ISBN 9781449335922.
  7. 1 2 Cleaveland, Rance ; Scott Smolka (diciembre de 1996). "Direcciones estratégicas en la investigación de la concurrencia" . ACM Computing Surveys . 28 (4): 607. doi : 10.1145/242223.242252 . S2CID 13264261 . 
  8. Campbell, Colin; Johnson, Ralph; Miller, Ade; Toub, Stephen (agosto de 2010). Programación paralela con Microsoft .NET . Microsoft Press. ISBN 978-0-7356-5159-3.
  9. Filman, Robert; Daniel Friedman (1984). Coordinated Computing - Tools and Techniques for Distributed Software . McGraw-Hill. ISBN 978-0-07-022439-1.
  10. Keller, Jörg; Christoph Keßler; Jesper Traff (2001). Programación práctica de PRAM . John Wiley e hijos.
  11. Lee, Edward; Alberto Sangiovanni-Vincentelli (diciembre de 1998). "Un marco para comparar modelos de computación" (PDF) . IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems . 17 (12): 1217– 1229. doi : 10.1109/43.736561 .
  12. Mogens Nielsen; Vladimiro Sassone; Glynn Winskel (1993). "Relaciones entre modelos de concurrencia" . REX School/Symposium .
  13. Frederick Knabe. Un protocolo distribuido para la comunicación basada en canales con elección PARLE 1992.
  14. William Clinger (junio de 1981). "Fundamentos de la semántica de actores". Tesis doctoral en matemáticas. MIT. hdl : 1721.1/6935 .{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  15. Roscoe, Colin (2001). Propiedades modales y temporales de los procesos . Springer. ISBN 978-0-387-98717-0.

Lecturas adicionales

  • Lynch, Nancy A. (1996). Algoritmos distribuidos . Morgan Kaufmann. ISBN 978-1-55860-348-6.
  • Tanenbaum, Andrew S.; Van Steen, Maarten (2002). Sistemas distribuidos: principios y paradigmas . Prentice Hall. ISBN 978-0-13-088893-8.
  • Kurki-Suonio, Reino (2005). Una teoría práctica de los sistemas reactivos . Springer. ISBN 978-3-540-23342-8.
  • Garg, Vijay K. (2002). Elementos de computación distribuida . Wiley-IEEE Press. ISBN 978-0-471-03600-5.
  • Magee, Jeff; Kramer, Jeff (2006). Concurrency: State Models and Java Programming . Wiley. ISBN 978-0-470-09355-9.
  • Distefano, S., & Bruneo, D. (2015). Evaluaciones cuantitativas de sistemas distribuidos: Metodologías y técnicas (1.ª ed.). Somerset: John Wiley & Sons Inc. ISBN 9781119131144
  • Bhattacharyya, SS (2013;2014;). Manual de sistemas de procesamiento de señales (Segunda;2;2.ª ed. 2013;). Nueva York, NY: Springer.10.1007/978-1-4614-6859-2 ISBN 9781461468592
  • Wolter, K. (2012;2014;). Evaluación de la resiliencia de los sistemas informáticos (1.ª ed.). Londres;Berlín;: Springer. ISBN 9783642290329
  • Diario de Álgebra de Procesos - Blog del Prof. Luca Aceto sobre Teoría de la Concurrencia
  • Sistemas concurrentes en la Biblioteca Virtual WWW
  • Presentación sobre patrones de concurrencia en ScaleConf.