前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Actor模型是做什么的?

Actor模型是做什么的?

作者头像
dys
发布2018-04-03 17:11:09
1.3K0
发布2018-04-03 17:11:09
举报
文章被收录于专栏:性能与架构

问题

用户A的操作 (1)开始事务 (2)操作资源1 (3)操作资源2 (4)提交事务 用户B的操作 (1)开始事务 (2)操作资源2 (3)操作资源1 (4)提交事务 如果用户A和用户B的两个事务同时发生,A锁住了资源1,B锁住了资源2,互相等待,陷入死锁 如果采用同步锁synchronized,可能会出现破坏逻辑一致性的问题 这个问题的根本原因:数据是被动的被处理 在读多写少,较少涉及事务机制的场景下,这个问题不明显,否则就面临此问题

Actor模型

Actor模型就是用来解决事务并发问题的 Actor模型 = 数据 + 行为 + 消息 上面的问题是因为数据是被动的,那么Actor模型就让数据有了自己的行为意识,不让别人处理自己的数据,别人只能通过消息的发送,激发行为处理数据,保证Actor内部数据只能被自己修改 传递消息是Actor模型的基础,这个过程类似收发邮件 (1)用户A给用户B发送了一封邮件 (2)用户B在合适的时候去检查邮箱,收到邮件,进行处理 (3)处理后给用户A发送一封确认结果的邮件 (4)用户A也会在合适的时候去检查邮箱,接收邮件 邮件就是消息,处理邮件就是对自己的数据执行相应的行为,用户A并不处理用户B的数据,只是发送消息告诉用户B处理 对于并发的情况也一样,因为每个参与者都有自己的邮箱,每封邮件都会按照它们到达的顺序被处理 所以,Actor模型固有了处理并发的特性 Actor模型的口号是:一切皆Actor,这和面向对象的‘一切皆对象’很相似,但面向对象是顺序性的,而Actor模型固有并发的特质 Actor是一个个独立的实体,他们之间毫无关联,只有发送消息这一种通信方式,消息让Actor之间解耦,消息传递形式简化了并行程序的开发 消息的类型、内容是任意的,有点像webservice,只传递消息,不必了解是如何实现的 Erlang,Go,Scala等语言都是支持Actor模型的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档