Si j'ai bien compris, le modèle acteur est exactement comme le modèle objet, mais avec quelques différences:
- CHAQUE objet génère son propre thread séparé et ce n'est pas un problème même lorsque vous avez des milliers d'objets.
- Les acteurs n'interagissent pas en appelant des fonctions et en obtenant des valeurs de retour, mais en envoyant et en recevant des messages.
- Si vous ne violez pas ce modèle, votre application utilisera la concurrence à sa pleine puissance sans aucun risque de conditions de concurrence.
- Tout ce que vous pouvez faire en OO, vous pouvez le faire en utilisant des acteurs mais mieux, le problème étant que tout ce que nous avons codé au cours des dernières années était basé sur OO - mais une transition est imminente.
Donc, par exemple, supposons que je doive définir une classe / un acteur de vecteur 3D, créer deux instances et appeler une opération de somme sur elles.
OBJET ORIENTÉ:
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
MODÈLE D'ACTEUR:
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
}
Est-ce que c'est ça? Ou je me trompe complètement?