文档章节

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

秋风醉了
 秋风醉了
发布于 2015/01/06 11:10
字数 801
阅读 1115
收藏 6
点赞 0
评论 0

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

共有 人打赏支持
秋风醉了
粉丝 229
博文 577
码字总数 407134
作品 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
并发编程模型

原文链接 作者: Jakob Jenkov 译者: 林威建 [weakielin@gmail.com] 并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。不同的并发模...

暗之幻影
2016/12/17
14
0
4、Java并发性和多线程-并发编程模型

以下内容转自http://ifeve.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B/: 并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给...

easonjim
2017/06/15
0
0
七周七并发模型

image.png 七个模型来介绍并发与并行。 线程与锁:线程与锁模型有很多众所周知的不足,但仍是其他模型的技术基础,也是很多并 发软件开发的首选。 函数式编程:函数式编程日渐重要的原因之一,...

高广超
01/01
0
0
Java并发的四种风味:Thread、Executor、ForkJoin和Actor

这篇文章讨论了Java应用中并行处理的多种方法。从自己管理Java线程,到各种更好几的解决方法,Executor服务、ForkJoin 框架以及计算中的Actor模型。 Java并发编程的4种风格:Threads,Execu...

恶魔永生
2015/01/14
0
0
十分钟带你了解Actor模型

背景介绍 计算机CPU的计算速度提高(频率的提高)是有限度的,我们能做的是放入多个计算核心。为了利用多核心的计算机,我们需要并发执行。但是多线程的方式会引入很多问题和增加调试难度。我...

LeonalGU
2017/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
16分钟前
0
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
21分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
37分钟前
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
55分钟前
0
0
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部