由于工作上关系目前经常被各种并发数据问题搞得焦头烂额,要么要性能舍弃数据上得一致性,要么要一致性但是却得到了特别糟糕的响应。难道鱼和熊掌真的无法兼得吗?

然后找到了类似奥尔良这种基于Actor模型的kuangjia

首先本人因为是C#系的所以暂不考虑Java系那套,那摆在面前的此类型的框架其实就2个。 Akka.Net和Orleans。

什么是Actor?

Actor应该说是一种编程模型,一个Actor是一个最基本的计算单原,他能接收消息并执行计算(一个行为)

它最重要的特性是每个Actor之间互相隔离,互补共享内存,也就是说每个Actor都能维持一个私有状态且不能被别人所改变。

这对于我们意味着什么呢?想下一般我们遇到的并发问题,是不是在我们执行某个操作的时候,一个数据不正确的被另一个操作所干扰,导致数据最终混乱,而Actor则确保自己的数据不能被别人改变(独立维护自己的状态)以便使得最终一致。

wait

如果Actor自己数据不能被别人改变,那就是顺序执行?那会不会很慢?

对于一个Actor来说,没错,他还真的就顺序执行,因此能确保准确性

但是你真正系统里肯定不会只有一个Actor,而是由很多Actor组成,每个Actor之间是能并行的(因为他们不共享数据,所以他们可以互相独立的正确处理)

具体来说,当并行的消息到达一个Actor的时候,它会存储到一个MailBox(邮箱)里(你可以简单理解为一个队列),然后Actor从MailBox捞数据,一条一条顺序的捞

然后不同的Actor则并行着处理一样的事情

由于大家都是互相独立的处理各自的事情,数据不会发生冲突,也就无需类似锁之类的机制来确保数据一致性问题

由于Actor类文章网上搜索一大片, 在此就不再过多阐述了。

什么是奥尔良?

简单一句话,微软的一个基于Actor模型的实现,具体介绍可以更多参考官网

奥尔良官网

他跟正儿八经的Actor相比,微软习惯就是将其做更加上层的封装,Actor都变成了Grains,万事万物皆是Grains的感觉

我干了什么?

我也刚开始入门,发这篇文章主要是想证实下,Actor那套是不是真的那么神,本文涉及的所有代码均在 https://github.com/virtualcca/OrleansTest/tree/master 上面

既然他们说他们是以单线程来处理同一个Actor,那我就想测试下用Orleans搞一个并发转账的场景,和我常规的多线程并发转账场景的一个对比,而我想看到的结果是,常规版的由于多线程的问题数据总是错乱的,而奥尔良则能始终正确

转账代码

我有一个账户,账户上面有Money, 我能做2个操作,要么转钱过来,要么查看我还有多少钱,当然,转账总要点时间的对吧,所以转账时候Delay了1ms

实际转账的执行代码

可以注意下奥尔良版和原始版唯一区别在于

奥尔良版是通过client.GetGrain来获取了一个IAccount,这样获取到的是属于奥尔良托管的一个Client实例,对其执行的操作其实会发送到Host里执行,然后Host里就是正儿八经的Actor架构来去处理所有操作

但是正如之前介绍Actor的时候谈到单个Actor是单线程,而多个Actor之间是并发,如何确定你是一个还是多个Actor,是通过一个Id来区分(具体奥尔良官网有介绍),而GetGrain后面的那个0的参数就是他的Id,也就是我的这个IAccount是属于一个Actor

常规版直接new一个实例执行同样操作

然后代码运行,可以看到结果

原始版的结果仅供参考,我每次运行得出来的结果也都不一样(多线程执行顺序是不确定的)

而奥尔良版则能正确的恒定输出4950

至此,可以明确奥尔良完美的实现了Actor里关于单个Actor单线程的这么个处理。。。。

原文地址:https://www.cnblogs.com/leolaw/p/10546239.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

初探奥尔良(Orleans)相关推荐

  1. Orleans学习入门(最近公司要用奥尔良,特此记录下学习过程,希望各大神多指教)...

    介绍 Orleans是一个可以直接构建分布式大型计算应用程序的框架,而无需学习和应用复杂的并发或其他可扩展的模式. 背景 云应用和服务本质上是并行和分布式的.他们也是互动和动态的; 通常需要几乎实时的 ...

  2. 微软的奥尔良项目简介

    在2014年的Build开发者大会上,微软研究院(Microsoft Research)公开了一个叫做"奥尔良"的项目.这篇博客的目的就是对这个项目做一个初步的介绍,并引导感兴趣的 ...

  3. 微软 奥尔良 游戏服务器,去了新奥尔良,才知道是一个城市,别只知道奥尔良烤翅...

    本号将持续更新国外旅游方面的知识,感兴趣的小伙伴欢迎点击右上角的关注,谢谢! 新奥尔良也是美国的一个著名旅游城市,是多种文化的组合体,我们坐着古老的街车沿着圣查尔斯大街从法国区向上城行驶,就好像是进入 ...

  4. 手撕鸭腌料批发场 新奥尔良烤肉腌料批发 奥尔良鸡叉骨腌料批发

    奥尔良烤翅的做法步骤 1.原料:鸡翅中750克.新奥尔良烤翅腌料一袋.2.清水泡10分钟后洗净.3.装盘用牙签仔鸡翅上扎满小洞.以便入味.4.倒入新奥尔良烤翅腌料.抓均至每个鸡翅都能粘到料.放置20分 ...

  5. 奥尔良烤翅(自调腌料做法)

    1.鸡翅洗净后用刀划斜口,再用厨房纸擦干水分: 2.准备好香蒜炸粉(一般用来炸香蒜排骨或者蒜味炸鸡的),这个是这款腌料中不可少的调料,如果买不到家乐的香蒜炸粉,也可用其他的蒜味炸粉或者蒜粉代替: 3. ...

  6. AMD公司的灵魂Athlon产品回忆录

    在CPU领域里的竞争,AMD与Intel从来就没有停止过,AMD也并没有如几年前人们所料想的那样被Intel压着打,反而步步紧逼Intel做出了种种不得以的决策.从AMD第一块CPU芯片开始,就已经发 ...

  7. CPU : CPU核心类型

    核心(Die)又称为内核,是CPU最重要的组成部分.CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算.接受/存储命令.处理数据都由核心执行.各种CPU核心都具有 ...

  8. AMD Athlon CPU 全系列回忆录

    Athlon已不仅是一款处理器名称,而成为AMD公司的灵魂.这是一个沿用了8年而不朽的称谓,它见证了AMD由受人摆布到走向成熟,见证了AMD与Intel 历时8年的性能斗争.Athlon并不是AMD的 ...

  9. orleans/Documentation

    福利 奥尔良的主要好处是︰开发人员工作效率,甚至为非专家程序员;和默认的透明可伸缩性与程序员没有特别努力.我们扩大每个下面这些好处. 开发人员的生产力 奥尔良的编程模型通过提供以下关键的抽象. 担保和 ...

最新文章

  1. 清华吴翼:从捉迷藏游戏说起,谈谈强化学习的六个开放问题
  2. AI 场景的价值体现——视觉 AI 技术落地实践
  3. 准IT工作者如何择师、如何学习
  4. python下拉菜单_python-web自动化:下拉列表操作
  5. 实用的4W、5V直流开关稳压电源电路图及解析
  6. mac phpstorm调试php,MAC下phpstorm20190302+Xdebug2.7断点调试PHP | 朱斌技术博客
  7. linux命令chmod如果当前用户属于多个组,那这个命令中的g指的是哪个组?按什么规则?
  8. jdbc 链接不了mysql_JDBC链接Mysql失败
  9. 一款超漂亮的简历生成器,金三银四的你一定用得上
  10. 7、8系升9系视频教程
  11. 收到垃圾广告短信,回复“T”退订,完全没用怎么办?
  12. 不等距双杆模型_对磁场中双杆模型问题的解析
  13. 01-leveldb概述
  14. 单片机读取obd_OBD_CAN读取代码(stm32f103)
  15. 高通骁龙平台芯片处理器(SoC)指南
  16. sax dom html解析xml,Python通过DOM和SAX方式解析XML的应用实例分享
  17. 主流CA吊销俄罗斯数字证书启示:升级国密算法SSL证书,助力我国网络安全自主可控
  18. 坯子库插件安装完以后搜不到里面的插件_SketchUp坯子库管理器
  19. sysstat 工具详细说明(一)
  20. GPU利用率与使用率

热门文章

  1. 使用ssh tunnel 来做代理或跳板
  2. UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  3. 编写properties文件的Eclipse插件
  4. .NET 开源免费图表组件库,Winform,WPF 通用
  5. 活久见啊,WPF工资已经这么高了!
  6. 每次跳槽,总得面对这摊事
  7. 如何在 C# 9 中使用record类型?
  8. C# 爬虫:疫情实时信息图
  9. WPF 制作便携小空调
  10. Dotnet的数据定位和匹配