最佳答案
我一直在研究学习 Erlang/OTP,因此,我一直在阅读(好吧,略读)关于演员模型的资料。
据我所知,角色模型只是一组功能(在 Erlang/OTP 中称为“进程”的轻量级线程中运行) ,它们只通过 传递信息相互通信。
这在 C + + 或其他语言中实现起来似乎相当简单:
class BaseActor {
std::queue<BaseMessage*> messages;
CriticalSection messagecs;
BaseMessage* Pop();
public:
void Push(BaseMessage* message)
{
auto scopedlock = messagecs.AquireScopedLock();
messagecs.push(message);
}
virtual void ActorFn() = 0;
virtual ~BaseActor() {} = 0;
}
每个进程都是派生的 BaseActor 的实例。参与者之间只通过消息传递进行交流。(即推)。角色使用初始化时的中心映射注册自己,该映射允许其他角色找到它们,并允许一个中心函数通过它们运行。
现在,我知道我忽略了,或者更确切地说,我忽略了一个重要的问题,那就是: 缺乏让步意味着一个演员可以不公平地消耗过多的时间。但是,在 C + + 中,跨平台协同程序是否是造成这种困难的主要原因呢?(例如,窗户就有纤维。)
我还漏掉了什么吗,还是模型真的这么明显?