标签:
学习 skynet 时初次接触到 ActorModel 模型,始终觉得有必要从宏观上了解 ActorModel 的概念,所以以维基上这篇文章为参考,把文章中的部分内容翻译成中文,好让自己体会一下 ActorModel 一些概念。再次说明,请原谅我蛋疼的翻译。
在计算机科学中,actor 模型是并发计算中的一种数学模型,它把 "actors" 作为并发计算的通用原语:响应它接收到的消息,一个 actor 自己可以决定自己的事务,可以创建更多的 actors ,发送更多的消息,决定如何响应下一条接收到的消息。actor 模型在1973年被提出。actor 模型既被作为理念来实现并行计算的框架,也被作为并发系统实现的理论基础。
根据 Carl Hewitt ,ActorModel 不像其他计算模型,它启蒙于物理(包括广义相对论和量子力学)。ActorModel 同时也受到一些编程语言的影响:Lisp ,Simula ,Smalltalk 的早些版本,以及 capability-based systems 和 packet switching 。由许多机器组成的大规模并行计算前景促进了 ActorModel 的发展。之后,通过多核架构实现的大规模并发的到来复兴了 ActorModel 。维基这一段下面接着介绍了哪些牛人做了关于 ActorModel 的事情。
ActorModel 的哲学是一切皆 actor 。这和面向对象的哲学 "一起皆 object " 类似,而两者的不同之处是面向对象程序是顺序执行的,ActorModel 程序是天然并发执行的。
actor 是一个计算实体,actors 可以并发的处理他们接收到的消息:
以上这些行为并没有特地的执行循序,有可能并发执行。
解耦消息的发送者是 ActorModel 的基本前提,这样可以进行并发通信和控制通信协议。
消息的接收者通过 address(地址) 标识,有时叫 "mailing address" 。因此一个 actor 只能和它拥有地址的 actor 进行通信,地址可以从它接收到的消息获得,也可以是它创建一个 actor 获得了此 actor 的地址。
ActorModel 的特征是 actors 之间固有的并发计算、动态创建 actors 、消息中标识发送者地址以及 actors 之间仅仅通过无序的异步消息进行通信。
消息传递机制是 ActorModel 很主要的一部分。
毫无疑问,第一个并发程序是中断程序。中断程序的执行需要来自外部的信号(来自键盘的按键、来自网络的数据包等等)。因此当信号到达时,计算机会被中断转而去执行中断程序。
在20世纪60年代早期,中断被用来模拟多个程序在一个处理器上的并发执行。带有共享内存的并发引出了并发控制问题。起初,这个问题被猜测是单台电脑上的相互互斥问题之一。之后在1971年和1973年之间,Edsger Dijkstra 提出了 semaphores 。Tony Hoare 和 Per Brinch Hansen 提出了 monitors 用来解决相互互斥问题。然而这些解决方案都没有提供程序语言上访问共享资源的支持。这种支持之后几年也被完成。
维基下面说明了 bounded nondeterminism 理论和 unbounded nondeterminism 理论。好多专业词汇,不懂翻译,所以就看看就好了。
ActorModel 不一定要缓存消息。没有消息的缓存在 ActorModel 发展时期引发了很多误解,到现在还是一个争论的话题。一些研究者认为消息应该缓存,而且消息应该像 IP 报文那样简单的发送,没有必要与接收者进行同步的握手(假设 A 要给 B 发送消息,这句话应该是指 A 直接发送消息给 B 就好,没有必要先发送握手消息到 B 告诉它我要给你发送消息,然后 B 返回告知 A 可以发送,最后 A 才发送真正的消息给 B )。
虽然 ActorModel 的发展逐渐允许消息本身带有地址。
有时需要发送消息到接收者并等待接收者返回结果。要想接收者能返回结果,可以让发送者在消息中带有发送者的地址,这样接收者便能返回结果。
actor 的创建以及消息中带有地址意味着 actors 之间有着变化的拓扑,就像 Simula 编程语言中,对象之间有着变化的拓扑。
在 skynet 中,一个服务就是一个 actor ,每个服务自身都有一个消息队列。对于同一个服务消息是顺序执行的,对于不同的服务消息是并发执行的。每个服务都有一个唯一的 id 标识自己,通过这个 id 就可以给这个服务发送消息。skynet 是的运行是靠消息驱动的,worker 线程不断的从消息队列中取出消息然后调用相应服务的 callback 函数处理消息。详情参考 skynet 源码。
标签:
原文地址:http://www.cnblogs.com/iirecord/p/4350223.html