Si entendí, el modelo de actor es igual que el modelo de objetos, pero con algunas diferencias:
- CADA objeto genera su propio hilo separado y no es un problema incluso cuando tiene miles de objetos.
- Los actores no interactúan llamando funciones y obteniendo valores de retorno, sino enviando y recibiendo mensajes.
- Si no viola ese modelo, su aplicación utilizará la concurrencia en toda su potencia sin ningún riesgo de condiciones de carrera.
- Todo lo que puede hacer en OO lo puede hacer con actores, pero mejor, el problema es que todo lo que codificamos en los últimos años se basó en OO, pero una transición es inminente.
Entonces, por ejemplo, supongamos que tengo que definir una clase / actor de vector 3d, crear dos instancias y llamar a una operación de suma en ellas.
ORIENTADO A OBJETOS:
class V3d {
constructor V3d(x,y,z) //bla
float x,y,z;
function sum(V3d b)
{
return V3d(x+b.x,y+b.y,z+b.z);
}
}
//using:
mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly
drawPoint(mySum) //uses the result
MODELO DE ACTOR:
actor V3d
{
constructor V3d(x,y,z) //bla
float x,y,z;
loop
{
receive 'sum',b:V3d :
send(caller,'sumResult',V3d(x+b.x,y+b.y,z+b.z))
}
}
//using:
send(V3d(1,2,3),'sum',V3d(3,2,1)) //creates 2 instances, send to the first one a request to sum with the second one
loop
{
receive 'sumResult',result:
drawPoint(result) //receives result and draws it
}
¿Es asi? ¿O estoy completamente equivocado?