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

然后找到了类似奥尔良这种基于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. pytorch中tensor.mul()和mm()和matmul()
  2. 如何在 Windows 中检查计算机正常运行时间
  3. CCNP学习笔记(6)
  4. STM32 进阶教程 11 - RAM中运行程序
  5. MySQL为表添加外键约束
  6. 10双屏鼠标过不去_升级到2.0版本的双屏工作桌!家中工作高效还需利器辅助
  7. 疯子的算法总结12--倍增
  8. php实现上传,PHP实现文件上传例子
  9. 【Java】列表、集合、哈希表和可变参数
  10. springmvc是什么_SpringBoot与SpringMVC的区别是什么?
  11. resnet模型的图像分类结构图_ResNet - 2015年 ILSVRC 的赢家(图像分类,定位及检测)...
  12. 俄勒冈州立大学计算机科学专业,美国俄勒冈州立大学专业介绍
  13. excel的lookup函数
  14. 萝卜小铺和店主们的故事(五)
  15. ubuntu16 坚果云不能打开
  16. oracle 错误06512,处理ORA-06512错误
  17. FFmpeg多媒体文件处理(ffmpeg打印音视频Meta信息)
  18. Git教学资源,安装,关联账号,创建/关联/克隆库,版本回退,管理修改基本指令
  19. 解决OpenOffice文件预览转换xlsx文件出现com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported
  20. 人物头像素描写生的重点是什么

热门文章

  1. 100亿人口会挨饿吗?人工智能迎击全球粮食问题
  2. XCode5 真机调试及发布应用
  3. Hibernate简单例子以及笔记
  4. video.js html5 视频播放器
  5. 如何注册java程序为windows服务
  6. 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈
  7. 拥抱开源!除了微软红帽,这些国际大厂你认识几个?
  8. 如何在 C# 循环中捕获局部变量?
  9. 基于 registry 搭建 Docker 私有镜像仓库
  10. dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用