Articulo de referencia

Modelo de actor y cálculo de procesos

En informática , el modelo de actores y los cálculos de procesos son dos enfoques estrechamente relacionados para el modelado de la computación digital concurrente . Véase la hi...

En informática , el modelo de actores y los cálculos de procesos son dos enfoques estrechamente relacionados para el modelado de la computación digital concurrente . Véase la historia del modelo de actores y los cálculos de procesos .

Existen muchas similitudes entre ambos enfoques, pero también varias diferencias (algunas filosóficas, otras técnicas):

  • Solo existe un modelo de Actor (aunque cuenta con numerosos sistemas formales para diseño, análisis, verificación, modelado, etc. ); existen numerosos cálculos de procesos , desarrollados para razonar sobre una variedad de sistemas concurrentes de distintos tipos y con diversos niveles de detalle (incluidos cálculos que incorporan tiempo, transiciones estocásticas o construcciones específicas de áreas de aplicación como el análisis de seguridad).
  • El modelo Actor se inspiró en las leyes de la física y depende de ellas para sus axiomas fundamentales, es decir, leyes físicas (véase la teoría del modelo Actor ); los cálculos de procesos se inspiraron originalmente en el álgebra ( Milner 1993 ) .
  • En los cálculos de procesos, los procesos son anónimos y se comunican enviando mensajes a través de canales con nombre (síncronos o asíncronos) o mediante entornos (que también pueden utilizarse para modelar comunicaciones tipo canal ( Cardelli y Gordon, 1998 ) ). En cambio, en el modelo de actores, los actores poseen una identidad y se comunican enviando mensajes a las direcciones de correo electrónico de otros actores (este estilo de comunicación también puede utilizarse para modelar comunicaciones tipo canal; véase más adelante).

Las publicaciones sobre el modelo Actor y sobre los cálculos de procesos tienen un buen número de referencias cruzadas, agradecimientos y citas recíprocas (véase el historial del modelo Actor y de los cálculos de procesos ).

Cómo funcionan los canales

La comunicación indirecta mediante canales ( por ejemplo, Gilles Kahn y David MacQueen [1977]) ha sido un tema importante para la comunicación en computación paralela y concurrente, afectando tanto la semántica como el rendimiento. Algunos cálculos de procesos difieren del modelo de actor en el uso de canales en lugar de la comunicación directa.

Canales síncronos

Los canales síncronos tienen la propiedad de que un emisor que introduce un mensaje en el canal debe esperar a que un receptor reciba el mensaje antes de poder continuar.

Canales síncronos simples

Un canal síncrono puede modelarse mediante un Actor que recibe puty getcomunica. A continuación se describe el comportamiento de un Actor para un canal síncrono simple:

  • Cada putcomunicación tiene un mensaje y una dirección a la que se envía un acuse de recibo cuando se recibe el mensaje.
  • Cada get comunicación tiene una dirección a la que se envía el mensaje recibido.
  • Al recibir una getcomunicación, el Actor elige una putcomunicación en orden FIFO y envía el mensaje y la confirmación a las direcciones especificadas.

Canales síncronos en cálculos de procesos

Sin embargo, los canales síncronos simples no son suficientes para cálculos de procesos como los Procesos Secuenciales Comunicantes (CSP) [Hoare 1978 y 1985] debido al uso del comando de elección protegida (siguiendo a Dijkstra) (llamado comando alternativo en CSP). En un comando de elección protegida, se pueden realizar múltiples ofertas (llamadas protecciones) simultáneamente en múltiples canales para putlos getmensajes; sin embargo, como máximo se puede elegir una protección para cada ejecución del comando. Dado que solo se puede elegir una protección, un comando de elección protegida generalmente requiere efectivamente un tipo de protocolo de confirmación de dos fases o quizás incluso un protocolo de confirmación de tres fases si se permiten tiempos de espera en las protecciones (como en Occam 3 [1992]).

Considere el siguiente programa escrito en CSP [Hoare 1978]:

[X :: Z!stop() || Y :: guard: boolean; guard := true; *[guard   Z!go(); Z?guard] || Z :: n: entero; n:= 0; *[X?stop()   Y!false; print!n; [] Y?go()   n := n+1; Y!true] ]

Según Clinger [1981], este programa ilustra el no determinismo global, ya que el no determinismo surge de la especificación incompleta de la sincronización de las señales entre los tres procesos X, Y, y Z. El comando repetitivo protegido en la definición de Ztiene dos alternativas:

  1. El stopmensaje es aceptado desde X, en cuyo caso Yse envía el valor falso y printse envía el valorn
  2. goSe acepta un mensaje de Y, en cuyo caso nse incrementa y Yse envía el valor verdadero .

Si Zalguna vez acepta el stopmensaje de X, entonces Xtermina. Aceptar stopprovoca Yque se envíe falso, lo que cuando se introduce como valor de su guardia hará Yque termine. Cuando tanto Xcomo Yhan terminado, Ztermina porque ya no tiene procesos activos que proporcionen entrada.

En el programa anterior, hay canales síncronos de Xa Z, Ya Z, y Za Y.

Analogía con el problema de coordinación del comité

Según Knabe [1992], Chandy y Misra [1988] caracterizaron esto como análogo al problema de coordinación del comité:

En una universidad, los profesores son asignados a diversos comités. Ocasionalmente, un profesor decide asistir a una reunión de alguno de sus comités y espera hasta que le sea posible. Las reuniones solo pueden comenzar si todos los miembros están presentes. La tarea consiste en asegurar que, si todos los miembros de un comité están esperando, al menos uno de ellos asista a alguna reunión.
El meollo del problema reside en que dos o más comités podrían compartir un profesor. Cuando ese profesor esté disponible, solo podrá elegir una de las reuniones, mientras que los demás seguirán esperando.

Un protocolo distribuido simple

Esta sección presenta un protocolo distribuido sencillo para canales en cálculos de procesos síncronos. El protocolo presenta algunos problemas que se abordan en las secciones siguientes.

El comportamiento de un comando de elección protegida es el siguiente:

  • El comando envía un mensaje a cada uno de sus guardias para prepare.
  • Cuando recibe la primera respuesta de uno de sus guardias de que está preparado, entonces envía un mensaje a ese guardia prepare to commity envía mensajes a todos los demás guardias abort.
    • Cuando recibe un mensaje del guardia que indica que es prepared to commit, entonces le envía un commitmensaje al guardia. Sin embargo, si el guardia lanza una excepción que indica que no puede prepare to commit, entonces el comando de elección protegida reinicia todo el proceso.
  • Si todos sus guardias responden que no pueden prepare, entonces la orden custodiada no hace nada.

El comportamiento de un guardia es el siguiente:

  • Cuando se recibe un mensaje prepare, el guardia envía un preparemensaje a cada uno de los canales con los que ofrece comunicarse. Si el guardia tiene valores booleanos que indican que no puede prepareo si alguno de los canales responde que no puede prepare, entonces envía abortmensajes a los otros canales y luego responde que no puede prepare.
    • Cuando se recibe un mensaje prepare to commit, el guardia envía un prepare to commitmensaje a cada uno de los canales. Si alguno de los canales responde que no puede prepare to commit, entonces envía abortmensajes a los otros canales y luego lanza una excepción que indica que no puede prepare to commit.
    • Cuando se recibe un mensaje commit, el guardia envía un commitmensaje a cada uno de los canales.
    • Cuando se recibe un mensaje abort, el guardia envía un abortmensaje a cada uno de los canales.

El comportamiento de un canal es el siguiente:

  • Cuando prepare to putse recibe una comunicación, entonces responde que está preparada si hay una prepare to getcomunicación pendiente a menos que terminatese haya recibido una comunicación, en cuyo caso lanza una excepción que indica que no puede prepare to put.
  • Cuando prepare to getse recibe una comunicación, entonces responde que está preparada si hay una prepare to putcomunicación pendiente a menos que terminatese haya recibido una comunicación, en cuyo caso lanza una excepción que indica que no puede prepare to get.
    • Cuando prepare to commit to putse recibe una comunicación, entonces responde que está preparada si hay una prepare to commit to getcomunicación pendiente a menos que terminatese haya recibido una comunicación, en cuyo caso lanza una excepción que indica que no puede prepare to commit to put.
    • Cuando prepare to commit to getse recibe una comunicación, entonces responde que está preparada si hay una prepare to commit to putcomunicación pendiente a menos que terminatese haya recibido una comunicación, en cuyo caso lanza una excepción que indica que no puede prepare to commit to get.
      • Cuando commit putse recibe una comunicación, entonces, dependiendo de cuál de los siguientes elementos se reciba:
        • Cuando se recibe una commit getcomunicación, si no se ha hecho ya, realice los preparativos puty getlimpie.
        • Cuando se reciba una abort getcomunicación, cancele los preparativos.
      • Cuando commit getse recibe una comunicación, entonces, dependiendo de cuál de los siguientes elementos se reciba:
        • Cuando se recibe una commit putcomunicación, si no se ha hecho ya, realice los preparativos gety putlimpie.
        • Cuando se reciba una abort putcomunicación, cancele los preparativos.
      • Cuando se reciba una abort putcomunicación, cancele los preparativos.
      • Cuando se reciba una abort getcomunicación, cancele los preparativos.

Hambre al obtener de múltiples canales

Consideremos nuevamente el programa escrito en CSP (discutido en Canales síncronos en cálculos de procesos más arriba):

[X :: Z!stop() || Y :: guard: boolean; guard := true; *[guard   Z!go(); Z?guard] || Z :: n: entero; n:= 0; *[X?stop()   Y!false; print!n; [] Y?go()   n := n+1; Y!true] ]

Como se señala en Knabe [1992], un problema con el protocolo anterior ( un protocolo distribuido simple ) es que el proceso Zpodría no aceptar nunca el stopmensaje X(un fenómeno llamado inanición ) y, en consecuencia, el programa anterior podría no imprimir nunca nada.

En contraste, considere un sistema de actores simple que consta de los actores X , Y , Z , y imprima donde

  • El Actor X se crea con el siguiente comportamiento:
    • Si "start"se recibe el mensaje, entonces envíe el mensaje a Z."stop"
  • El actor Y se crea con el siguiente comportamiento:
    • Si "start"se recibe el mensaje, entonces envíe el mensaje a Z."go"
    • Si se recibe el mensaje verdadero , entonces envíe el mensaje a Z."go"
    • Si se recibe el mensaje falso , entonces no haga nada.
  • El actor Z se crea con el siguiente comportamiento que tiene un contador nque inicialmente es 0 :
    • Si "start"se recibe el mensaje, no haga nada.
    • "stop"Si se recibe el mensaje , entonces envíe a Y el mensaje falso y envíe imprimir el mensaje el contador n.
    • "go"Si se recibe el mensaje , entonces envíe a Y el mensaje verdadero y procese el siguiente mensaje recibido con un contador nde n+1.

Según las leyes de la semántica de los actores, el sistema de actores anterior siempre se detendrá cuando a los actores X , Y y Z se les envíe un "start"mensaje, lo que dará como resultado el envío de un número que puede ser ilimitadamente grande.

La diferencia entre el programa CSP y el sistema Actor radica en que el Actor Z no recibe mensajes mediante un comando de elección controlada desde múltiples canales. En cambio, procesa los mensajes según el orden de llegada, y, según las leyes de los sistemas Actor, stopse garantiza la llegada del mensaje.

Livelock al obtener desde múltiples canales

Considere el siguiente programa escrito en CSP [Hoare 1978]:

[Postor1 :: b: oferta; *[Bids1?b   process1!b; [] Ofertas2?b   proceso1!b;] || Postor2 :: b: oferta; *[Bids1?b   process2!b; [] Ofertas2?b   proceso2!b;] ]

Como se señala en Knabe [1992], un problema con el protocolo anterior ( un protocolo distribuido simple ) es que el proceso Bidder2podría no aceptar nunca una oferta de Bid1o Bid2(un fenómeno llamado bloqueo mutuo ) y, por lo tanto, process2podría no recibir nunca nada. En cada intento de aceptar un mensaje, Bidder2se ve frustrado porque la oferta que fue ofrecida por Bids1o Bids2es arrebatada por Bidder1porque resulta que Bidder1tiene un acceso mucho más rápido que Bidder2a Bids1y Bids2. Por lo tanto, Bidder1puede aceptar una oferta, procesarla y aceptar otra oferta antes de que Bidder2pueda comprometerse a aceptar una oferta.

Eficiencia

Como se señala en Knabe [1992], un problema con el protocolo anterior ( Un protocolo distribuido simple ) es la gran cantidad de comunicaciones que deben enviarse para realizar el intercambio de claves y enviar un mensaje a través de un canal síncrono. De hecho, como se muestra en la sección anterior ( Bloqueo mutuo ), la cantidad de comunicaciones puede ser ilimitada.

Resumen de los problemas

Las subsecciones anteriores han articulado los siguientes tres problemas relacionados con el uso de canales síncronos para cálculos de procesos:

  1. Inanición. El uso de canales síncronos puede provocar inanición cuando un proceso intenta obtener mensajes de múltiples canales en un comando de elección protegida.
  2. Bloqueo mutuo. El uso de canales síncronos puede provocar que un proceso quede atrapado en un bloqueo mutuo cuando intenta obtener mensajes de múltiples canales en un comando de elección protegida.
  3. Eficiencia. El uso de canales síncronos puede requerir una gran cantidad de comunicaciones para obtener mensajes de múltiples canales en un comando de elección controlada.

Cabe destacar que en todos los casos mencionados, surgen problemas derivados del uso de un comando de selección controlada para obtener mensajes de múltiples canales.

canales asíncronos

Los canales asíncronos tienen la propiedad de que un remitente que introduce un mensaje en el canal no necesita esperar a que un receptor reciba el mensaje a través del canal.

Canales asíncronos simples

Un canal asíncrono puede modelarse mediante un Actor que recibe puty getcomunica. A continuación se describe el comportamiento de un Actor para un canal asíncrono simple:

  • Cada putcomunicación tiene un mensaje y una dirección a la que se envía un acuse de recibo inmediatamente (sin esperar a que el mensaje sea recibido por otra getcomunicación).
  • Cada get comunicación tiene una dirección a la que se envía el mensaje recibido.

Canales asíncronos en cálculos de procesos

El lenguaje de programación Join-calculus (publicado en 1996) implementaba cálculos concurrentes locales y distribuidos. Incorporaba canales asíncronos, así como un tipo de canal síncrono que se utiliza para llamadas a procedimientos. El cálculo Aπ Actor de Agha ( Agha y Thati, 2004 ) se basa en una versión tipada del cálculo π asíncrono .

Álgebras

El uso de técnicas algebraicas fue pionero en los cálculos de procesos. Posteriormente, se han desarrollado varios cálculos de procesos diferentes destinados a proporcionar razonamiento algebraico sobre sistemas de actores en ( Gaspari y Zavattaro 1997 ) , ( Gaspari y Zavattaro 1999 ) , ( Agha y Thati 2004 ) .

semántica denotacional

Will Clinger (basándose en el trabajo de Irene Greif [1975], Gordon Plotkin [1976], Henry Baker [1978], Michael Smyth [1978] y Francez, Hoare , Lehmann y de Roever [1979]) publicó la primera teoría denotacional matemática satisfactoria del modelo Actor utilizando la teoría de dominios en su disertación en 1981. Su semántica contrastó el no determinismo no acotado del modelo Actor con el no determinismo acotado de CSP [Hoare 1978] y Procesos Concurrentes [Milne y Milner 1979] (véase semántica denotacional ). Roscoe [2005] ha desarrollado una semántica denotacional con no determinismo no acotado para una versión posterior de Procesos Secuenciales Comunicantes Hoare [1985]. Más recientemente, Carl Hewitt [2006b] desarrolló una semántica denotacional para actores basada en diagramas temporizados .

Ugo Montanari y Carolyn Talcott [1998] han contribuido a intentar reconciliar a los actores con los cálculos de procesos.

Referencias

  • Carl Hewitt, Peter Bishop y Richard Steiger. Un formalismo de actores modulares universales para la inteligencia artificial. IJCAI 1973.
  • Robin Milner. Procesos: Un modelo matemático de agentes computacionales en el Coloquio de Lógica de 1973.
  • Irene Greif y Carl Hewitt. Semántica de actores de PLANNER-73. Actas de la conferencia del Simposio de la ACM sobre Principios de Lenguajes de Programación. Enero de 1975.
  • Irene Greif. Semántica de los procesos paralelos comunicantes. Tesis doctoral en Ingeniería Eléctrica e Informática del MIT. Agosto de 1975.
  • Gordon Plotkin. Una construcción de dominio de potencia. SIAM Journal on Computing, septiembre de 1976.
  • Carl Hewitt y Henry Baker, Actores y Funcionales Continuos. Actas de la Conferencia de Trabajo de la IFIP sobre la Descripción Formal de los Conceptos de Programación. 1-5 de agosto de 1977.
  • Gilles Kahn y David MacQueen. Corrutinas y redes de procesos paralelos. IFIP. 1977.
  • Aki Yonezawa. Técnicas de especificación y verificación para programas paralelos basadas en la semántica de paso de mensajes. Tesis doctoral del MIT EECS. Diciembre de 1977.
  • Michael Smyth. Dominios de poder . Revista de Ciencias de la Computación y de Sistemas. 1978.
  • George Milne y Robin Milner . Procesos concurrentes y su sintaxis. JACM. Abril de 1979.
  • CAR Hoare . Comunicación de procesos secuenciales. Archivado el 1 de febrero de 2021 en Wayback Machine CACM. Agosto de 1978.
  • Nissim Francez, CAR Hoare , Daniel Lehmann y Willem de Roever. Semántica del no determinismo, la concurrencia y la comunicación. Revista de Ciencias de la Computación y de Sistemas. Diciembre de 1979.
  • Mathew Hennessy y Robin Milner. Sobre la observación del no determinismo y la concurrencia. LNCS 85. 1980.
  • Will Clinger. Fundamentos de la semántica de actores. Tesis doctoral en matemáticas del MIT. Junio ​​de 1981.
  • Mathew Hennessy. Un modelo de términos para procesos síncronos. Departamento de Informática. Universidad de Edimburgo. CSR-77-81. 1981.
  • JA Bergstra y JW Klop. Álgebra de procesos para la comunicación síncrona. Información y control. 1984.
  • Luca Cardelli. Un modelo de implementación de comunicación por encuentro . Seminario sobre concurrencia. Notas de clase en informática 197. Springer-Verlag. 1985.
  • Robert van Glabbeek. No determinismo acotado y el principio de inducción de aproximación en álgebra de procesos. Simposio sobre aspectos teóricos de las ciencias de la computación en STACS, 1987.
  • K. Mani Chandy y Jayadev Misra. Diseño de programas paralelos: una base. Addison-Wesley, 1988.
  • Robin Milner, Joachim Parrow y David Walker. Un cálculo de procesos móviles. Departamento de Informática, Edimburgo. Informes ECS-LFCS-89-85 y ECS-LFCS-89-86. Junio ​​de 1989. Revisado en septiembre y octubre de 1990, respectivamente.
  • Robin Milner. El cálculo pi poliádico: un tutorial. Universidad de Edimburgo. Informe LFCS ECS-LFCS-91-180. 1991.
  • Kohei Honda y Mario Tokoro. Un cálculo de objetos para la comunicación asincrónica ECOOP 91.
  • José Meseguer. La lógica de reescritura condicional como modelo unificado de concurrencia en Artículos seleccionados del Segundo Taller sobre Concurrencia y Composicionalidad. 1992.
  • Frederick Knabe. Un protocolo distribuido para comunicación basada en canales con elección PARLE 1992.
  • Geoff Barrett. Manual de referencia Occam 3 INMOS. 1992.
  • Benjamin Pierce, Didier Rémy y David Turner. Un lenguaje de programación de orden superior tipado basado en el cálculo pi. Taller sobre teoría de tipos y su aplicación a sistemas informáticos. Universidad de Kioto. Julio de 1993.
  • Milner, Robin (enero de 1993), "Elementos de interacción: conferencia del premio Turing", Communications of the ACM , 36 , CACM: 78–89 , doi : 10.1145/151233.151240.
  • R. Amadio y S. Prasad. Ubicaciones y fallas. Fundamentos de la tecnología del software y la informática teórica. Conferencia. 1994.
  • Cédric Fournet y Georges Gonthier. La máquina abstracta química reflexiva y el cálculo de unión POPL 1996.
  • Cédric Fournet, Georges Gonthier, Jean-Jacques Lévy, Luc Maranget y Didier Rémy. Un cálculo de agentes móviles CONCUR 1996.
  • Tatsurou Sekiguchi y Akinori Yonezawa . Un cálculo con código de movilidad FMOODS 1997.
  • Gaspari, Mauro; Zavattaro, Gianluigi (mayo de 1997), An Algebra of Actors (Informe técnico), Universidad de Bolonia
  • Cardelli, Luca; Gordon, Andrew D. (1998), "Entornos móviles", Fundamentos de la ciencia del software y estructuras computacionales , Lecture Notes in Computer Science, vol.  1378, pp. 140–155 , doi : 10.1007/BFb0053547 , ISBN  978-3-540-64300-5
  • Ugo Montanari y Carolyn Talcott. ¿Pueden convivir actores y agentes Pi? Notas electrónicas en informática teórica. 1998.
  • Robin Milner. Sistemas de comunicación y móviles: el cálculo Pi. Cambridge University Press. 1999.
  • Gaspari, Mauro; Zavattaro, Gianluigi (1999), "An Algebra of Actors", Métodos formales para sistemas distribuidos abiertos basados ​​en objetos , págs. 3 a 18, doi : 10.1007/978-0-387-35562-7_2 , ISBN  978-1-4757-5266-3
  • Davide Sangiorgi y David Walker. El cálculo Pi  : una teoría de los procesos móviles. Cambridge University Press. 2001.
  • P. Thati, R. Ziaei y G. Agha. Una teoría de pruebas de mayo para cálculos asíncronos con localidad y sin coincidencia de nombres. Metodología algebraica y tecnología de software. Springer Verlag. Septiembre de 2002. LNCS 2422.
  • Agha, Gul; Thati, Prasanna (2004), "Una teoría algebraica de actores y su aplicación a un lenguaje simple basado en objetos", De la orientación a objetos a los métodos formales (PDF) , Lecture Notes in Computer Science, vol.  2635, pp. 26–57 , doi : 10.1007/978-3-540-39993-3_4 , ISBN  978-3-540-21366-6Archivado desde el original (PDF) el 20 de abril de 2004 , consultado el 15 de diciembre de 2005.
  • JCM Baeten, T. Basten y MA Reniers. Álgebra de los procesos comunicantes. Cambridge University Press. 2005.
  • He Jifeng y CAR Hoare. Vinculación de teorías de concurrencia. Universidad de las Naciones Unidas, Instituto Internacional de Tecnología de Software (UNU-IIST). Informe n.º 328. Julio de 2005.
  • Luca Aceto y Andrew D. Gordon (editores). Cálculos de procesos algebraicos: los primeros veinticinco años y más allá del álgebra de procesos. Bertinoro, Forlì, Italia, 1-5 de agosto de 2005.
  • Roscoe, AW (2005), Teoría y práctica de la concurrencia , Prentice Hall , ISBN 978-0-13-674409-2
  • Carl Hewitt (2006b) ¿Qué es el compromiso? Físico, organizacional y social COIN@AAMAS. 2006.