Cuando observamos el Modelo de actor y los Procesos secuenciales de comunicación , vemos que ambos intentan hacer concurrencia en función del paso de mensajes , pero son distintos .
(Vemos implementaciones del modelo CSP en las rutinas de go-lang (y core.async de Clojure ) y el modelo de actor en el kit de herramientas Akka de Scala )
Estoy tratando de obtener una lista simple de las diferencias entre el modelo de actor y CSP. Hasta ahora tengo:
- el paso del mensaje de los actores es asíncrono, el paso del mensaje CSP es sincrónico
- los actores son componibles , CSP no (necesariamente)
- los actores siempre tienen no determinismo ilimitado , CSP puede tener no determinismo limitado o ilimitado
- los actores tienen topología variable mientras que CSP tiene topología fija
- los actores tienen el principio de localidad , CSP no tiene localidad
- los actores están diseñados en torno a su comportamiento, CSP no necesariamente tiene esto
¿Es esto correcto? ¿Hay algo que me falta?
Supuestos
- Cuando digo 'modelo de actor', me refiero a la base teórica detrás de la implementación en el marco Akka de Scala
concurrency
message-passing
ojo de halcón
fuente
fuente
Respuestas:
Así es como creo que funciona Erlang. Creo que Akka es muy similar.
Cada proceso tiene un solo buzón. El remitente coloca los mensajes en el buzón del receptor y el receptor los recupera mediante la coincidencia de patrones. Este proceso de coincidencia puede cambiar el orden de los mensajes en el sentido de que el mensaje más antiguo en un buzón puede no coincidir, pero uno más joven sí. En este caso, el más joven se consume primero. Aparte de eso, se conserva el orden de los mensajes.
fuente