初探奥尔良(Orleans)
由于工作上关系目前经常被各种并发数据问题搞得焦头烂额,要么要性能舍弃数据上得一致性,要么要一致性但是却得到了特别糟糕的响应。难道鱼和熊掌真的无法兼得吗?
然后找到了类似奥尔良这种基于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)相关推荐
- Orleans学习入门(最近公司要用奥尔良,特此记录下学习过程,希望各大神多指教)...
介绍 Orleans是一个可以直接构建分布式大型计算应用程序的框架,而无需学习和应用复杂的并发或其他可扩展的模式. 背景 云应用和服务本质上是并行和分布式的.他们也是互动和动态的; 通常需要几乎实时的 ...
- 微软的奥尔良项目简介
在2014年的Build开发者大会上,微软研究院(Microsoft Research)公开了一个叫做"奥尔良"的项目.这篇博客的目的就是对这个项目做一个初步的介绍,并引导感兴趣的 ...
- 微软 奥尔良 游戏服务器,去了新奥尔良,才知道是一个城市,别只知道奥尔良烤翅...
本号将持续更新国外旅游方面的知识,感兴趣的小伙伴欢迎点击右上角的关注,谢谢! 新奥尔良也是美国的一个著名旅游城市,是多种文化的组合体,我们坐着古老的街车沿着圣查尔斯大街从法国区向上城行驶,就好像是进入 ...
- 手撕鸭腌料批发场 新奥尔良烤肉腌料批发 奥尔良鸡叉骨腌料批发
奥尔良烤翅的做法步骤 1.原料:鸡翅中750克.新奥尔良烤翅腌料一袋.2.清水泡10分钟后洗净.3.装盘用牙签仔鸡翅上扎满小洞.以便入味.4.倒入新奥尔良烤翅腌料.抓均至每个鸡翅都能粘到料.放置20分 ...
- 奥尔良烤翅(自调腌料做法)
1.鸡翅洗净后用刀划斜口,再用厨房纸擦干水分: 2.准备好香蒜炸粉(一般用来炸香蒜排骨或者蒜味炸鸡的),这个是这款腌料中不可少的调料,如果买不到家乐的香蒜炸粉,也可用其他的蒜味炸粉或者蒜粉代替: 3. ...
- AMD公司的灵魂Athlon产品回忆录
在CPU领域里的竞争,AMD与Intel从来就没有停止过,AMD也并没有如几年前人们所料想的那样被Intel压着打,反而步步紧逼Intel做出了种种不得以的决策.从AMD第一块CPU芯片开始,就已经发 ...
- CPU : CPU核心类型
核心(Die)又称为内核,是CPU最重要的组成部分.CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算.接受/存储命令.处理数据都由核心执行.各种CPU核心都具有 ...
- AMD Athlon CPU 全系列回忆录
Athlon已不仅是一款处理器名称,而成为AMD公司的灵魂.这是一个沿用了8年而不朽的称谓,它见证了AMD由受人摆布到走向成熟,见证了AMD与Intel 历时8年的性能斗争.Athlon并不是AMD的 ...
- orleans/Documentation
福利 奥尔良的主要好处是︰开发人员工作效率,甚至为非专家程序员;和默认的透明可伸缩性与程序员没有特别努力.我们扩大每个下面这些好处. 开发人员的生产力 奥尔良的编程模型通过提供以下关键的抽象. 担保和 ...
最新文章
- pytorch中tensor.mul()和mm()和matmul()
- 如何在 Windows 中检查计算机正常运行时间
- CCNP学习笔记(6)
- STM32 进阶教程 11 - RAM中运行程序
- MySQL为表添加外键约束
- 10双屏鼠标过不去_升级到2.0版本的双屏工作桌!家中工作高效还需利器辅助
- 疯子的算法总结12--倍增
- php实现上传,PHP实现文件上传例子
- 【Java】列表、集合、哈希表和可变参数
- springmvc是什么_SpringBoot与SpringMVC的区别是什么?
- resnet模型的图像分类结构图_ResNet - 2015年 ILSVRC 的赢家(图像分类,定位及检测)...
- 俄勒冈州立大学计算机科学专业,美国俄勒冈州立大学专业介绍
- excel的lookup函数
- 萝卜小铺和店主们的故事(五)
- ubuntu16 坚果云不能打开
- oracle 错误06512,处理ORA-06512错误
- FFmpeg多媒体文件处理(ffmpeg打印音视频Meta信息)
- Git教学资源,安装,关联账号,创建/关联/克隆库,版本回退,管理修改基本指令
- 解决OpenOffice文件预览转换xlsx文件出现com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported
- 人物头像素描写生的重点是什么
热门文章
- 100亿人口会挨饿吗?人工智能迎击全球粮食问题
- XCode5 真机调试及发布应用
- Hibernate简单例子以及笔记
- video.js html5 视频播放器
- 如何注册java程序为windows服务
- 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈
- 拥抱开源!除了微软红帽,这些国际大厂你认识几个?
- 如何在 C# 循环中捕获局部变量?
- 基于 registry 搭建 Docker 私有镜像仓库
- dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用