文档章节

【转载】actor 模型的优缺点分析介绍

摩云飞
 摩云飞
发布于 2014/06/07 11:54
字数 681
阅读 214
收藏 4
点赞 1
评论 0

      actor 模型是 1973 年就提出的一个分布式并发编程模型,在 erlang 语言中得到广泛支持和应用。目前 java中 也出现了很多支持 actor模型的库:akka、killim、jetlang等等,其中 akka 是使用 scala 写的,有 scala 和 java 两套使用接口;killim 需要对编译出来的 class 文件进行后处理。

最近项目需要架构整改,以支撑后续的发展,正在考虑是否采用 actor 模型。

先收集点资料,这两天好好分析一下。 

actor 模型参考维基百科定义(http://en.wikipedia.org/wiki/Actor_model):
actor 是一个计算实体,当其收到消息时,可以并发执行如下操作:

  • 发送有限数量的消息给其他 actor
  • 创建有限数量的新 actor
  • 指定收到下一消息时的行为

      ACE 的 reactor 模型是通过注册/回调方式进行驱动的程序开发模式,先注册自己关注什么事件,然后反应堆就会在该事件发生时回调你。这实际上与 actor 模型有些类似。reactor 在维基百科定义如下(http://en.wikipedia.org/wiki/Reactor_pattern):
      reactor 是一种设计模式,用于一到多个输入并发向一个服务处理器发送请求时进行事件处理。服务处理器将收到的请求同步分发到相应的请求处理器上。
      按照定义,所有 reactor 系统都是单线程的,但可以应用到多线程环境中。reactor 模型的特点是控制流反转(inversed flow of control)

proactor 模型可以认为是 reactor 模型的一种异步实现,reactor 要求收到请求后同步分发的请求处理器上,而 proactor 允许异步处理,定义(http://en.wikipedia.org/wiki/Proactor_pattern):
      proactor 也是事件处理的设计模式,在这种模式中,长时间运行的活动在单独的异步过程中处理,异步处理过程技术后,一个 completion handler 被调用。这个有些类似 akka actor 模型中,future 对象的 onComplete、onSuccess、onFailed 方法。
      proactor 的 ace 实现(http://www.cs.wustl.edu/~schmidt/PDF/proactor.pdf

线程为啥不好?为啥要用event代替?http://www.stanford.edu/~ouster/cgi-bin/papers/threads.pdf
scala 的好书(programming in scala)http://www.cs.uwaterloo.ca/~brecht/courses/854-Scalable-Systems-Software/Possible-Readings/scala/ProgrammingInScala.pdf


本文转载自:http://www.pms.cc/architecture-design/actor/201307/actor_1265.html

共有 人打赏支持
摩云飞
粉丝 365
博文 352
码字总数 952690
作品 0
徐汇
程序员
下一代的 Actor 模型框架--Proto Actor

ProtoAct 是下一代的 Actor 模型框架,提供了 .NET 和 Go 语言的实现,默认支持分布式,提供管理和监控功能。在过去几年,我们经常看到两种 Actor 模型方法相互竞争,首先是经典的 Erlang/A...

匿名 ⋅ 2017/02/03 ⋅ 10

C++并发编程框架Theron(1)——Actor模型介绍

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

fx677588 ⋅ 2017/07/09 ⋅ 0

七周七并发模型

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

高广超 ⋅ 01/01 ⋅ 0

java并发的四种风味:Thread、Executor、ForkJoin和Actor

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

fdhay ⋅ 2016/03/31 ⋅ 0

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

Actor_更轻量化的并发处理模型 JAVA在JDK5之前写并发程序是非常麻烦的,你要么继承Thread类,要么实现Runnable接口,同步机制的力粒度也很粗。JDK5之后,引入了Concurrent包,增加了很多并发...

秋风醉了 ⋅ 2015/01/06 ⋅ 0

Spark如何使用Akka实现进程、节点通信的简明介绍

《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第...

beliefer ⋅ 2016/04/05 ⋅ 0

Spring与Akka的集成

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

beliefer ⋅ 2017/01/04 ⋅ 0

Java并发的四种风味:Thread、Executor、ForkJoin和Actor

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

恶魔永生 ⋅ 2015/01/14 ⋅ 0

使用StarUML建模(转载)

使用StarUML建模(转载) 导读:   StarUML是专业的UML建模工具,又因为它是免费开源的,因此是初学者的首选软件。废话少说,开始:   1、界面介绍:   主要是四个方面:工具栏、工作区、...

无与伦比的卒子 ⋅ 2012/11/27 ⋅ 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节...

OSC_cnhwTY ⋅ 46分钟前 ⋅ 0

多线程(四)

线程池和Exector框架 什么是线程池? 降低资源的消耗 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池没有或者减少T1和T3 提高线程的可管理性。 线程池要做些什...

这很耳东先生 ⋅ 53分钟前 ⋅ 0

使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

瑟青豆 ⋅ 今天 ⋅ 0

19.压缩工具gzip bzip2 xz

6月22日任务 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍: linux中常见的一些压缩文件 .zip .gz .bz2 .xz .tar .gz .tar .bz2 .tar.xz 建立一些文...

王鑫linux ⋅ 今天 ⋅ 0

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 今天 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 今天 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 今天 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 今天 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 今天 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部