Anladıysam, aktör modeli tıpkı nesne modeli gibidir, ancak birkaç farklılıkla:
- HER nesne kendi ayrı iş parçacığını ortaya çıkarır ve binlerce nesneniz olsa bile bu bir sorun değildir.
- Aktörler işlevleri çağırarak ve dönüş değerleri alarak etkileşimde bulunmazlar, bunun yerine mesaj gönderip alırlar.
- Bu modeli ihlal etmezseniz, uygulamanız yarış koşullarında herhangi bir risk olmadan tam gücüyle eşzamanlılık kullanacaktır.
- OO'da yapabileceğiniz her şeyi aktörler kullanarak yapabilirsiniz, ancak daha iyi, sorun, son yıllarda kodladığımız her şeyin OO tabanlı olmasıydı - ancak bir geçiş çok yakın.
Diyelim ki 3B vektör sınıfı / aktörü tanımlamam, iki örnek oluşturmam ve üzerlerinde bir toplama işlemi çağırmam gerekiyor.
NESNE ODAKLI:
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
AKTÖR MODELİ:
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
}
Öyle mi? Yoksa tamamen yanlış mıyım?