码迷,mamicode.com
首页 > 其他好文 > 详细

ActorModel 概念翻译

时间:2015-03-21 15:18:07      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

  学习 skynet 时初次接触到 ActorModel 模型,始终觉得有必要从宏观上了解 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 可以并发的处理他们接收到的消息:

  • 发送消息给其他的 actors 。
  • 创建其他的 actors 。
  • 决定如何响应接收到的消息。

以上这些行为并没有特地的执行循序,有可能并发执行。

解耦消息的发送者是 ActorModel 的基本前提,这样可以进行并发通信和控制通信协议。

消息的接收者通过 address(地址) 标识,有时叫 "mailing address" 。因此一个 actor 只能和它拥有地址的 actor 进行通信,地址可以从它接收到的消息获得,也可以是它创建一个 actor 获得了此 actor 的地址。

ActorModel 的特征是 actors 之间固有的并发计算、动态创建 actors 、消息中标识发送者地址以及 actors 之间仅仅通过无序的异步消息进行通信。

消息传递机制

消息传递机制是 ActorModel 很主要的一部分。

Unbounded nondeterminism controversy

毫无疑问,第一个并发程序是中断程序。中断程序的执行需要来自外部的信号(来自键盘的按键、来自网络的数据包等等)。因此当信号到达时,计算机会被中断转而去执行中断程序。

在20世纪60年代早期,中断被用来模拟多个程序在一个处理器上的并发执行。带有共享内存的并发引出了并发控制问题。起初,这个问题被猜测是单台电脑上的相互互斥问题之一。之后在1971年和1973年之间,Edsger Dijkstra 提出了 semaphores 。Tony Hoare 和 Per Brinch Hansen 提出了 monitors 用来解决相互互斥问题。然而这些解决方案都没有提供程序语言上访问共享资源的支持。这种支持之后几年也被完成。

维基下面说明了 bounded nondeterminism 理论和 unbounded nondeterminism 理论。好多专业词汇,不懂翻译,所以就看看就好了。

Direct communication and asynchrony

ActorModel 不一定要缓存消息。没有消息的缓存在 ActorModel 发展时期引发了很多误解,到现在还是一个争论的话题。一些研究者认为消息应该缓存,而且消息应该像 IP 报文那样简单的发送,没有必要与接收者进行同步的握手(假设 A 要给 B 发送消息,这句话应该是指 A 直接发送消息给 B 就好,没有必要先发送握手消息到 B 告诉它我要给你发送消息,然后 B 返回告知 A 可以发送,最后 A 才发送真正的消息给 B )。

Actor creation plus addresses in messages means variable topology

虽然 ActorModel 的发展逐渐允许消息本身带有地址。

有时需要发送消息到接收者并等待接收者返回结果。要想接收者能返回结果,可以让发送者在消息中带有发送者的地址,这样接收者便能返回结果。

actor 的创建以及消息中带有地址意味着 actors 之间有着变化的拓扑,就像 Simula 编程语言中,对象之间有着变化的拓扑。

最后

在 skynet 中,一个服务就是一个 actor ,每个服务自身都有一个消息队列。对于同一个服务消息是顺序执行的,对于不同的服务消息是并发执行的。每个服务都有一个唯一的 id 标识自己,通过这个 id 就可以给这个服务发送消息。skynet 是的运行是靠消息驱动的,worker 线程不断的从消息队列中取出消息然后调用相应服务的 callback 函数处理消息。详情参考 skynet 源码。

 

ActorModel 概念翻译

标签:

原文地址:http://www.cnblogs.com/iirecord/p/4350223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!