我知道答案为时已晚但对于可能仍然感兴趣的人:
ASWatcher 和 ASHandle 是Actor Model的实现,它是:
处理并发计算的概念模型。它定义了一些关于系统组件应该如何表现和相互交互的一般规则
使用这种模型的最著名的语言可能是Erlang
演员是计算的原始单位。它是接收消息并基于它进行某种计算的东西
这个想法与我们在面向对象语言中的想法非常相似:对象接收消息(方法调用)并根据它接收到的消息(我们正在调用的方法)执行某些操作。主要区别在于演员之间是完全隔离的,他们永远不会共享内存。还值得注意的是,一个参与者可以维护一个私有状态,而该状态永远不会被另一个参与者直接更改
重要的是要理解,尽管多个参与者可以同时运行,但参与者将按顺序处理给定的消息。这意味着如果您向同一个 Actor 发送 3 条消息,它一次只会执行一条。要同时执行这 3 条消息,您需要创建 3 个参与者并向每个参与者发送一条消息。
正如您在ASHandle的电报代码中看到的那样:
- (void)reset
{
TG_SYNCHRONIZED_BEGIN(_delegate);
_delegate = nil;
TG_SYNCHRONIZED_END(_delegate);
}
- (bool)hasDelegate
{
bool result = false;
TG_SYNCHRONIZED_BEGIN(_delegate);
result = _delegate != nil;
TG_SYNCHRONIZED_END(_delegate);
return result;
}
进一步阅读:维基百科和这个