当前位置: 首页 > news >正文

免费站推广网站在线成都网站建设模板制作

免费站推广网站在线,成都网站建设模板制作,网站建设默认字体,新闻发布会方案本文已.Net语法为主,同时写有Scala及Java实现代码 严肃的说,演员是一个广泛的概念,作为外行人我对Actor 模型的定义: Actor是一个系统中参与者的虚拟人物,Actor与Actor之间是可以相互沟通,所有的沟通都是通过Message 比如说一个呼叫中心,数以百万计的客户可能会呼叫一个1-800的…本文已.Net语法为主,同时写有Scala及Java实现代码 严肃的说,演员是一个广泛的概念,作为外行人我对Actor 模型的定义: Actor是一个系统中参与者的虚拟人物,Actor与Actor之间是可以相互沟通,所有的沟通都是通过Message 比如说一个呼叫中心,数以百万计的客户可能会呼叫一个1-800的号码,并与许多可能的客户服务代表进行对话 向这样类型的交互可以使用演员建模 在Actor模型中,一切都是Actor,就想在面向对象编程(OOP)中一切都是Object一样.在OOP中,你需要使用类和对象进行建模,在Akka中,你可以使用Actor和Message进行建模 以下是Akka中基本例子 using System; using Akka.Actor; namespace ActorsSendingMessages { /// summary /// 在Akka.NET中Actor都继承于UntypedActor。/// /summary public class BasicActor : UntypedActor { protected override void PreStart() { } protected override void PreRestart(Exception reason, object message) { } protected override void OnReceive(object message) { //handle messages here } protected override void PostStop() { } protected override void PostRestart(Exception reason) { } } } 什么是Message 可能已经注意到了BasicActor中定义的方法 .Net protected override void OnReceive(object message) { //handle messages here} 该OnReceive方法是Actor接收Message的地方,在Akka中,一个Message就是一个Object,Message可以是任意类型的实例 Actor通常只能处理特定类型的Message,如果Actor收到无法处理的Message,则不会触发任何异常,一般只是将Message标记为unhandledMessage是不变的 什么是不可变的对象呢? 不可变对象:是一个对象中的状态(即该对象在内存中的内容)一旦被实例化就不能修改 类似于String类型(.net中 string) 不可变的Message本质上是线程安全的.没有线程可以修改不可变Message的内容,所以接收到原始Message的第二个线程不必担心以前的线程有修改Message的可能 因此,在Akka中,所有消息都是不可变的,线程也是安全的,这也是为什么可以让上千万Akka的Actor同时处理消息的原因之一.正式不可变的Message消除了同步机制和其他不必要的代码 Actor的行为 我们大概了解了Actor和Message,那这些如何用? Actor通过Message进行通信 在OOP中,对象通过函数调用与其他对象进行通信.A类在B类上调用一个函数,并等待该函数返回,然后A类可以继续其余工作.在Akka和Actor模型中,Actor之间通过Message进行通信 那有什么特别的呢? 对于初学者来说,消息传递是异步的,发送Message的Actor可以在接收的Actor处理发件人的Message时继续执行其他工作.所以Actor之间的互动,默认情况下都是异步的 还有另一个变化 由于所有函数调用都被Message代替,即对象的不同实例,因此Actor可以存储其函数调用的历史记录,甚至延迟处理一些函数调用 想象一下,如何使用一个Actor来构建像Microsoft Word中的“撤消”按钮这样的功能?默认情况下你有一个Message代表每个人对文档所做的更改.要撤消其中一个更改只需要将消息从UndoActor的垃圾邮件中删除,并将该更改推送回管理Word文档的当前状态的另一个Actor。在实践中这是一个非常强大的概念。 Actor发送Message到地址而不是直接发送给Actor 位置透明 什么是位置透明,位置透明意味着无论在何时向Actor发送Message,都不需要知道他们在系统中的位置,可能这个Message覆盖数百台计算机,所以只需要知道Actor的地址. 就像给别人打电话一样,你只需要知道电话号码,其他的电信供应商就会帮你连通. Actor的工作方式也是一样,每个Actor都包含了以下部分地址 Protocol(协议):就像网络上使用的Http和Https一样,Akka支持多种传输协议用于进程间的通信.单进程Actor系统默认协议是akka://如果使用的远程或者集群,则通常会使用akka.tcp://或者akka.udp://在节点之间进行通信 ActorSystem(Actor系统):在akka的每个ActorSystem实例必须在启动时赋予一个名称,该名称可以由所有参与分布式的多个进程或者计算机共享ActorSystem. Address(地址):如果不使用远程处理,则ActorPath可以省略这一部分,这部分是用来传达用于Actor系统之间的远程通信的具体IP地址/域名和端口信息 Path(路径):这是一个特定Actor在地址上的路径,结构就像一个网站的Url,所有用户定义的actor都是在/user/下 因此,要向Actor发送消息: .Net //local actor var actorRef MyActorSystem.Selection(/user/myActor); actorRef.Tell(HI!); //remote actor var remoteActorRef MyActorSystem.Selection(akka.tcp://MyActorSystemlocalhost:1001/user/myActor); remoteActorRef.Tell(HI!); 向远程Actor发送Message就像本地Actor一样,这就是位置透明的意思 发送给Actor地址的所有Message都是放置在属于Actor的邮箱中 当向Actor发送Message时,该Message不会直接进入Actor的OnReceive方法. Message被放置在按照FIFO(先进先出)顺序排列的邮箱中,就像C#中QueueT(java中LinkedList)数据结构一样.邮箱有一个非常简单的工作,接收和挂起邮件,直到Actor准备好处理它们. 当Actor准备处理Message时,邮箱将把Message推送到Actor的OnReceive方法中,并运行Actor的消息处理方法. Actor只能一次处理一个Message Akka中保证参与者处理Message时,Actor的上下文和内部状态都是线程安全的 之所以这样的原因是: 因为Message是不可变的,所以每个Message的内容本质上是线程安全的 因为Message是串行处理的,所以更改一个actor的内部状态和上下文都不需要跨多个线程进行同步 因此,一个Actor在它的OnReceive方法退出之前,都无法处理下一个Message.当处理完时,邮箱会将下一个可用的Message推送到OnReceive方法中 Actor可以拥有内部状态 就像任何类一样,Actor可以拥有自己的属性和字段 当一个Actor重启时,actor实例就像我们这个BasicActor类的一个实例一样被销毁并重新创建. BasicActor创建新的一个实例,通过Props把构造函数的参数传递给新的实例 Actor有一个明确的生命周期 在Actor可以从邮箱中开始处理Message之前,必须由Actor系统进行实例化并运行其生命周期. Actor被创建并启动,然后会花费大部分时间接收消息,如果不再需要Actor,可以终止或者停止Actor 如果Actor以外崩溃(即抛出未处理的Exception),Actor的父级将从头开始自动重启Actor的生命周期,而不会丢失仍在Actor邮箱中的剩余的Message 结合之前的例子BasicActor中实现这个生命周期: Actors constructor(构造函数):BasicActor没有中并没有声明,而是使用了默认的构造函数,当然也可以使用任何带参数的构造函数 PreStart:这是在actor可以开始接收消息之运行,是放置初始化逻辑的好地方,在重启时会被调用 PreRestart:如果Actor意外失败(即抛出未处理的Exception),Actor的父级会重启Actor PostStop:一旦Actor停止并且不再接收消息,就会被调用,这里可以处理清理引用对象,PostStop在Actor重启时不会调用,只有在人为关闭时才调用 PostRestart:在PreRestart之后,PreStart之前被调用,这是可以处理崩溃错误和诊断报告 每个Actor都有父级,有的有子级 就像人一样,Actor有父母,有的有祖父母,兄弟姐妹和孩子 这意味着每个Actor都必须由其他Actor创建,所以我们代码: .Net var actorRef MyActorSystem.ActorOf(Props.CreateBasicActor(), myActor); actorRef.Tell(HI!); 在/user/根Actor下创建一个新的Actor,新的Actor的路径就是/user/myActor 同样,还可以在BasicActor中创建其他Actor .Net protected override void OnReceive(object message) { var childActor Context.ActorOf(Props.CreateBasicChildActor(), child1);childActor.Tell(Hi!); } 这样childActor的路径就是/user/myActor/child1/ 父级监督子级 在关于Actor生命周期的部分中,提到了Actor是由他们的父级进行重启的概念.这就类似于,每个家长都收到他们孩子发的特别的消息求助,我要崩溃了. 每个父级都带有默认的SuperviserStrategy对象(可以自定义).该对象决定了如何处理他们的子级Actor的失败.有三种方式: Restart:重启失败的Actor,父级默认方式,除非子级在60秒内反复重启 Stop:永久停止失败的Actor Escalate:将决定交给父级的父级处理 当发出一个Restart或者Stop 的Message,受影响的所有的子级包括自己都会重启或者停止.当然,也可以重启失败的Actor的actor家族树整个部分  引荐:https://petabridge.com/blog/akkadotnet-what-is-an-actor/ 原文地址http://www.cnblogs.com/yangleiblog/p/6766197.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://www.pierceye.com/news/96995/

相关文章:

  • 做导航网站赚钱吗建立网站需要多少钱费用
  • 大同网站建设哪家好网站后台登录模板html
  • 网站建设过程中准备的工作手机制作网站
  • 做专业网站设计多少钱代理小企业网站建设
  • 怎样提升网站关键词免费的html模版下载
  • 栖霞网站定制三合一建站网站
  • 免费建立一个个人网站设计官网登录入口
  • 门户网站模板之家北京网上服务平台
  • 合肥网站优化方案东莞做网站那家好
  • 个人备案网站可以做论坛吗山东住房建设厅官网站首页
  • 寺院网站模板网站策划制作公司 北京
  • 昆山教育云平台网站建设宁晋县建设局网站
  • 廊坊网站公司dw做网站背景音乐
  • 阜南做网站搜索引擎优化seo多少钱
  • 贵州建设厅网站怎样查询电工证天津网站备案
  • 常州做网站的公司在盐城做网站的网络公司电话
  • seo站外推广如何用wampp 做网站
  • 怎样用手机做网站中企动力百度百科
  • 哪些网站可以做任务挣钱免费app软件
  • 国内简约网站平潭县机场建设网站
  • wordpress 全站通知wordpress怎样打开速度快
  • 广州市建设职业培训学校网站移除wordpress版本
  • 如何申请一个网站 新网动画制作大师
  • 动易后台 网站统计调查 报表类型怎样使用手机相册备份网站源码
  • 做网站放到百度上需要什么查看wordpress使用什么主题
  • 深圳企业网站seo郑州汉狮专业做网站公司
  • 广东网站建设多少钱辛集专业网站建设
  • 怎样做网站公司的销售小程序推广计划怎么赚钱
  • 网站开发文档编写wordpress小说站群
  • 南宁网站开发推广网站html模板下载