据我了解,参与者模型就像对象模型一样,但是有一些区别:
- 每个对象都产生它自己的单独线程,即使有成千上万个对象,也不是问题。
- 参与者不是通过调用函数和获取返回值来进行交互,而是通过发送和接收消息来进行交互。
- 如果您不违反该模型,则您的应用将充分利用并发功能,而不会出现竞争状况的风险。
- 在OO中可以执行的所有操作都可以使用actor来完成,但更好的是,问题在于最近几年我们编写的所有内容都是基于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
}
是吗 还是我完全错了?