Actor_更轻量化的并发处理模型

JAVA在JDK5之前写并发程序是非常麻烦的,你要么继承Thread类,要么实现Runnable接口,同步机制的力粒度也很粗。JDK5之后,引入了Concurrent包,增加了很多并发特性的支持,如Callable<T>接口,可以使用Future<T>来获取每个任务返回的结果,而原来的Runnable是没有这个能力的。还有就是更细粒度的锁,如Lock接口。

Actor Model最早是在上世纪70-80年代就被提出来了,是用来编写并行计算或分布式系统的高层次抽象,让程序员不必为多线程模式下共享锁而烦恼, Erlang 最先实现Actor Model,SCALA参考了这个实现。

Actors将状态和行为封装在一个轻量的进程/线程中,但是不和其他Actors分享状态,每个Actors有自己的封闭环境,当需要和其他Actors交互时,通过发送事件和消息,发送是异步的,非堵塞的(fire-and-forget),发送消息后不必等另外Actors回复,也不必暂停,每个Actors有自己的消息队列,进来的消息按先来后到排列,这就有很好的并发策略和可伸缩性,可以建立性能很好的事件驱动系统。

SCALA实现Actor Model有两种实现方式:

  • 基于线程的实现:类似JAVA中的thread方式,通过定义一个thread-specific方法(Scala中的Actor类的actor方法/JAVA中的Thread类的run方法),将一个线程和actor绑定;
  • 基于事件的实现:通过定义一个线程池和一系列的事件处理函数,将事件处理函数作为actor方法,实现多个actor共享一个线程池;

通常情况下两种实现模型各有自己的优缺点,线程模型简单易用,但效率不高;而事件模型高效但难于设计。为了适应这两种模型,Scala的Actor库实现了两个不同操作:receive和react,两个操作都是试图从actor的邮箱中提取消息,然后通过模式匹配的方式调用处理函数,但是receive是基于线程模型的,而react是基于消息模型的。

AKKA平台是TypeSafe发布并维护的轻量级Actor框架,相对于SCALA原生定义的Actor,其具有如下的特点:

1.更加简单的并发策略Simpler Concurrency,通过Actors STM & Transactors能够简化编写可靠的并行计算

2.EDA架构Event-driven Architecture,完美的异步事件驱动架构,不会堵塞

3.真正的可伸缩性,使用异步消息在多核以及多个节点之间扩展。

4.容错性,重视失败。Let it crash!

5.远程透明性,底层可以使用NETTY或是THRIFT来通讯

6.集群管理能力,Cluster机制是AKKA20后提供的新功能

AKKA系统特别适合在云端或是基于多刀片系统的分布式计算,具有很强的Scale out的能力。

时间: 2024-08-04 05:40:19

Actor_更轻量化的并发处理模型的相关文章

轻量化ViewControllers,读文章做的总结

推荐一个网站 http://objccn.io/ 我这两天才开始看 获益匪浅 看了第一篇文章 <更轻量的View Controllers>感觉写的不错 感觉作者 原文地址 http://objccn.io/issue-1-1/ 示例项目的代码有点旧 Xcode6运行出错 懒的理了 所以我大概模仿他写了一点测试代码 运行环境Xcode7/iOS9 轻量化ViewControllers 顾名思义 就是把ViewController的代码进行简化 让控制器更简单 更清晰 一.把DataSource和

更轻更快的Vue.js 2.0与其他框架对比(转)

更轻更快的Vue.js 2.0 崭露头角的JavaScript框架Vue.js 2.0版本已经发布,在狂热的JavaScript世界里带来了让人耳目一新的变化. Vue创建者尤雨溪称,Vue 2.0 在性能上有显著的提升,同时保持轻量的文件下载: 渲染层基于一个轻量级的Virtual DOM实现进行了重写,该Virtual DOM实现fork自snabbdom.新的渲染层相比v1带来了巨大的性能提升,也让Vue 2.0成为了最快速的框架之一. 根据1.0到2.0迁移指南,“大约90%的API是相

轻量化卷积神经网络模型总结by wilson(shffleNet,moblieNet,squeezeNet+Xception)

一.简介 主要参考博客:纵览轻量化卷积神经网络 https://zhuanlan.zhihu.com/p/32746221 1, SqueezeNet: SqueezeNet对比AlexNet能够减少50倍的网络参数,但是却拥有相近的性能.SqueezeNet主要强调用1x1的卷积核进行feature map个数的压缩,从而达到大量减少网络参数的目的.在构造网络的时候,采用VGG的堆叠思想. 2, moblieNet: MobileNet采用depth-wise convolution的卷积方式

iOS Method Swizzling和分类的妙用AppDelegate轻量化处理

http://www.cocoachina.com/ios/20151117/14167.html 简介 在iOS工程中,AppDelegate往往会有上千行,甚至几千行,这样就会给维护AppDelegate带来诸多麻烦.比方说,老板想在出现HomeViewController之前弹出广告并停顿几秒,这样你就要加入插入广告的逻辑:又比方说,老板想在开始做个请求,判断某个开关是否打开.这样就会在AppDelegate中插入很多相关的不相关的代码. 在AppDelegate中,- (BOOL)app

轻量化ViewController的几个小技巧

轻量化ViewController MVC最令人头疼的问题可能就是随着项目愈发复杂,ViewController的代码也会变得越来越冗长.阅读了objc的<Lighter View Controllers>和<Clean Table >这两篇文章之后,总结了一些常用的轻量化ViewController的小技巧. 分离业务重点 既然要简化ViewController中的代码,那么在不改变原来实现方式的前提下,唯一的方法就是把一些可以不用放在ViewController中的代码转移出去

比容器更轻更快的虚拟机

尽管容器技术在今天越来越被人接受,但是安全性依然是一个绕不开的问题,由于容器采用的是共享内核外加 cgroups 和 namespaces 等黑魔法的方式进行隔离注定了会有很多路径的 bug 导致隔离性问题,安全隐患依然存在.而不使用虚拟机的原因不外乎虚拟机启动太慢,额外开销太高,性能由于多了一层会下降.面对容器和虚拟机这两个极端,容器一方想把容器做的隔离性更好,虚拟化方面想把虚拟机做的更轻.结果, neclab 的一群人居然做到把虚拟机的启动速度做的比 Docker 还快,内存开销比 Dock

更轻量的 View Controllers

View controllers 通常是 iOS 项目中最大的文件,因为它们包含了许多不必要的代码.所以 View controllers 中的代码几乎总是复用率最低的.我们将会看到给 view controllers 瘦身的技术,让代码变得可以复用,以及把代码移动到更合适的地方. http://tang3w.com/translate/objective-c/objc.io/2013/10/22/%E6%9B%B4%E8%BD%BB%E9%87%8F%E7%9A%84-view-control

一张表格的协作工具:你还能找到更轻量的吗?

关于协作工具.团队项目管理软件.企业协作平台等标签"协作"的东西,有个共同的障碍.就是须要或复杂或简单的"设置". 比如,创建全部团队成员账号.建立组织.创建组织结构.分配权限. 中国传统管理软件有个如今看来值得怀疑的的特点,就是须要复杂的组织结构和权限分配.包含公司.树状部门结构.岗位.角色.员工. 然后对每一个部分.岗位.角色.员工授权各个模块功能. 看似非常有逻辑.非常严谨.可是,这就是国内信息化系统难以实施的原因之中的一个:太麻烦啦.按现代的评价风格就是.用

js便签笔记(14)——用nodejs搭建最简单、轻量化的http server

1. 引言 前端程序猿主要关注的是页面,你可能根本就用不到.net,java,php等后台语言. 但是你制作出来的网页总要运行.总要测试吧?——那就免不了用到http server.我先前都是用visual studio的,虽然很好用,功能很强大,但是我就开发一个html.javascript.css,干嘛用这种傻大本粗的东西.打开一次特别慢,占内存特别厉害,安装时C盘占去好几个G的空间. 后来闲来无事就换成了nodejs.不用安装任何插件,只需要手动创建三个小文件(总共才2KB),运行即可,速