文档章节

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

秋风醉了
 秋风醉了
发布于 2015/01/06 11:10
字数 801
阅读 1125
收藏 6

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的能力。

====================END====================

本文转载自:http://www.open-open.com/lib/view/open1345651653345.html

共有 人打赏支持
秋风醉了
粉丝 236
博文 578
码字总数 419420
作品 0
朝阳
程序员
基于Actor的并发方案

前言 本文原文标题:《The Neophyte’s Guide to Scala Part 14: The Actor Approach to Concurrency》,作者:Daniel Westheide, 原文链接:http://danielwestheide.com/blog/2013/02/27/th......

bluishglc
2016/11/14
0
0
C++并发编程框架Theron(1)——Actor模型介绍

1 说在前面的话   Theron是近些年发展起来的一个非常不错的C++并发编程框架,最近有详细阅读Theron的相关资料,发现它思想非常有条理,结构很明朗,非常适合项目开发。其实Theron国内研究还...

fx677588
2017/07/09
0
0
《Akka应用模式:分布式应用程序设计实践指南》读书笔记1

作者属于Scala、Akka技术爱好者,但苦于Akka没有关于设计模式的文章,偶尔搜到《Akka应用模式》一书,如获至宝。现整理一些读书笔记和自己的感悟,以供参考。 Actor模型 Actor模型感觉还是很...

gabrywu
06/05
0
0
Spring与Akka的集成

概述 近年来随着Spark的火热,Spark本身使用的开发语言Scala、用到的分布式内存文件系统Tachyon(现已更名为Alluxio)以及基于Actor并发编程模型的Akka都引起了大家的注意。了解过Akka或者A...

beliefer
2017/01/04
0
0
java并发的四种风味:Thread、Executor、ForkJoin和Actor

本文由 ImportNew - shenggordon 翻译自 Oleg Shelajev。欢迎加入翻译小组。转载请见文末要求。 这篇文章讨论了Java应用中并行处理的多种方法。从自己管理Java线程,到各种更好几的解决方法,...

fdhay
2016/03/31
27
0

没有更多内容

加载失败,请刷新页面

加载更多

Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
58分钟前
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
5
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
4
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0
mixin混入

①新建mixin.js文件 const mixin = { methods: { /** * 分页公共方法 */ handleSizeChange(val) { this.pageData.size = val; this.query(); }, hand......

不负好时光
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部