내가 이해한다면, 액터 모델은 오브젝트 모델과 비슷하지만 약간의 차이점이 있습니다.
- 모든 객체는 별도의 스레드로 생성되며 수천 개의 객체가 있어도 문제가되지 않습니다.
- 액터는 함수를 호출하고 반환 값을 가져 오는 대신 상호 작용하지 않고 메시지를 보내고받습니다.
- 해당 모델을 위반하지 않으면 앱은 경쟁 조건의 위험없이 전체 기능에 동시성을 사용합니다.
- OO에서 할 수있는 모든 것은 액터를 사용하여 할 수 있지만 더 나은 문제는 지난 몇 년 동안 코딩 한 모든 것이 OO를 기반으로한다는 것입니다. 그러나 전환이 임박했습니다.
예를 들어, 3d 벡터 클래스 / 액터를 정의하고 두 개의 인스턴스를 생성하고 그에 대한 합 연산을 호출해야한다고 가정하십시오.
객체 지향 :
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
배우 모델 :
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
}
그게 다야? 아니면 내가 완전히 틀렸어?