Orleans的单线程执行模型
Orleans在默认情况下只创建一个grain的实例,并以单线程模型执行。如果同一个grain实例,在Orleans存在多个实例,就会产生并发冲突,单线程执行模型就可以完全避免并发冲突了。
但在特殊场景下,有些实例是需要创建多个实例或者以非单线程的执行方式来满足性能的需要;
如何支持创建多个实例
对于了解负载均衡的人,如果web服务器支持无状态(分布式Sesson或者cookie身份识别),会很容易做负载。同样的,对于grain来说,如果是无状态的,那么在系统中创建任意多的实例都是一样的,不存在状态不同步的问题。
那么如何在Orleans支持这样的grain呢?
Orleans提供了[StatelessWorker]的Attribute,标记为StatelessWorker的,Orleans会自动调整该grain的实例数量来满足系统的需要。而对于标记为StatelessWorker的Grain,一般只是根据参数调用其它的grain行为,自身没有也不需要保持任何状态。
当标记为StatelessWorker的Grain实例数量不足以应对当前系统的处理请求时,Orleans会自动在cluster中的其它Silo(grain的宿主容器)创建新的Grain实例,用以满足系统的处理需求。当系统热点过去后,如果该Grain一直闲置,是对系统资源的一种浪费,Orleans会自动释放这些闲置的Grain占用的资源。这种方式很像云计算中的弹性云计算的方式。
如何支持非单线程执行模式
分布式应用程序的本质是并行,但是并行带来了更多的复杂性。有两个方式可以降低这种复杂性
1.对Actor实例的内部状态以单线程方式访问
2.Actor之间不共享任何数据,仅仅通过消息进行交互
单线程的数据访问,避免了数据征用,大大降低了分布式应用的复杂性。所以Orleans默认是单线程的执行模式。但这种执行模式,也带来了死锁发生的可能性。
比如A发消息给B,等待B的响应
B收到消息后,又发消息给A,B开始等待A的响应
A由于正在等待之前发给B消息的响应,而无法处理B新发来的消息
A和B之间相互等待,产生了死锁。
而对于A和B之间2次消息并不会产生并发冲突,对于这样的,Orleans提供一种方式,允许grain以非单线程的模型执行。 [Reentrant] Attribute,标记了这个属性的Grain允许多次进入,但此处并非脱离了grain的单线程执行模型。graincode仍然运行在单线程模型下,只是允许请求交错执行。
标记了[Reentrant]之后,我们在看之前A B的示例。
A发消息给B,等待B的响应
B收到消息后,又发消息给A,B开始等待A的响应
A因为标记了[Reentrant] ,可以接受并处理B发来的消息,A处理完毕后发回响应给B
B收到响应后,完成自己的处理过程,返回响应给A,完成整个调用
Orleans的单线程执行模型的更多相关文章
- 从JavaScript的单线程执行说起
先看一段代码: 1 2 3 4 5 setTimeout(function(){ alert("a"); }, 0); while(1); alert("b&qu ...
- CLR via C# 摘要一:托管程序的执行模型
托管程序的执行模型大致如下: 编译源代码为程序集(dll或exe文件),程序集包括了记录相关信息的元数据和IL代码 执行程序集文件时,启动CLR,JIT负责把IL编译为本地代码并执行 IL是微软推出的 ...
- CLR执行模型
好好学习底层运行机制,从CLR via C# 开始. CLR的执行模型: CLR:Common Language Runtime,是一个可由多种编程语言使用的"运行时".CLR的核 ...
- ASP.NET执行模型之IIS服务器处理流程
之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过 ...
- Windows Phone 执行模型概述
Windows Phone 执行模型控制在 Windows Phone 上运行的应用程序的生命周期,该过程从启动应用程序开始,直至应用程序终止. 该执行模型旨在始终为最终用户提供快速响应的体验.为此, ...
- 【Framework】HTTP运行期与页面执行模型
HTTP运行期 HTTP运行期处理客户端应用程序(例如Web浏览器)进入的一个Web请求,通过处理它的应用程序的适当组件路由请求,然后产生响应并发回提出请求的客户端应用程序. 进入的HTTP Web请 ...
- 01.由浅入深学习.NET CLR 基础系列之CLR 的执行模型
.Net 从代码生成到执行,这中间的一些列过程是一个有别于其他的新技术新概念,那么这是一个什么样的过程呢,有什么样的机制呢,清楚了这些基本的东西我们做.Net的东西方可心中有数.那么,CLR的执行模型 ...
- CLR 的执行模型(2)
第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...
- 第一章 CLR 的执行模型
CLR via C# 读书笔记:第一章 CLR 的执行模型(1) 第Ⅰ部分CLR基础.这部分为三章(第一章:CLR的只想能够模型,第二章:生成.打包.部署和管理应用程序及类型,第三章:共享程序集和强命 ...
随机推荐
- 'telnet' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
在telnet与ftp服务器相连时出现的问题: 原因:windows自带telnet,只是没有安装 解决如下: 然后关机重启
- mongodb账号安全操作
安装服务 mongod --install --serviceName mongodb --storageEngine=mmapv1 --dbpath i:\mongodb\data --journa ...
- mysql主从复制的一篇文章(转载)
管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希 ...
- PowerDesigner15中定义varbinary(max)列
PowerDesigner15 概念数据模型(Entity)中要定义数据类型为varbinary(max)的特性(Attribute),应将数据类型(Data Type)选择为other,在代码(Co ...
- 关于mysql 的一些零碎.
/* 又在做自己以前做的事.总是拿以前的眼光来看现在,导致了其实自己已经很low,但是还觉得自己很xxx. 好吧,最近开始PHP审计.jishigou!!!!!! */ 查看日志情况. show va ...
- SSL/TLS 协议详解
SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议.TLS ...
- Volley框架之网络请求和图片加载
Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架. Volley的特性 (1).封装了的异步的请求API.Volley 中大多是基于接口的设计,可配置性强.(2). ...
- 案例:TableLayout表格布局——迷你计算器
计算器可以常用线性布局(LinearLayout)和表格布局(tableLayout).Gridlayout 今天我用的是表格布局 效果如下: 代码如下: <TableLayout xmlns: ...
- Linux crontab命令的使用方法
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...
- mui学习笔记
一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefre ...