Akka可能很多人都没有用过,也不知道是什么,但如果说起Scala或Spark就有很多人都听说过或使用过 ,这里简单说下三者的关系Akka是使用Scala开发的,Spark中使用了Akka作为其消息的通信工具;这篇文章主要 说说Akka的一些特性,做个简要的介绍;

  要说Akka首先要从并发开始说起,我记得之前我也写过并发模型相关的文章,并发模型主要有这么三类:

    1、共享内存模型

    2、Actor模型

    3、CSP模型

  共享内存模型:是通过使用线程与锁对共享内存进行控制用于实现并发,它依赖于多线程、锁,会产生过多的线程又使用锁对竞态资源进行同步控制,所以性能不是太高,对编程也不太友好;

  Actor模型:使用Actor作为并发的基础多个任务之间通过Actor相互发送消息进行通讯,Actor比线程轻量得多,一组Actor使用一个或多个线程所以也就没有线程、锁相关影响性能的问题存在,对编程也很友好;

  CSP模型Communicating Sequential Process):为多个进程提供了channel,并发的任务存放于channel当中,Golang的goroutine也是用了类似CSP模式的并发,并在channel中多加一个缓存;

  Actor与CSP模型都提倡:要通过通讯来共享内存,不要通过共享内存来通讯,这个可以说是他们与共享内存模型最大的区别;

  介绍了相关的基本概念,接下来说说今天的主题:Akka

  

  简单来说Akka就是基于Actor模型实现的并发框架;Akka降低了编写具有容错性、可扩展的并发程序的难度,容错性方面采用了“let it crach(让它崩溃)模型”;Akka为垂直扩展(并发)、水平扩展(远程调用)、 高容错提供了一致的编程模型;Akka具有以下几种特性:

  Actors:Actor为并发程序提供了简单高级别的抽象,为异步、非阻塞、高性能的事件驱动模型,1G内存可以容纳数百万个Actor;

  容错性:使用“let it crach”作为其监控层次体系的核心,监控层次可跨越JVM,使编写出“永不停机”、“自愈和”的高容错系统的难度大大降低;

  位置透明:Akka中所有元素都是为了适应分布式而设计的,Actor之间只能通过发送消息进行通讯所有操作均是异步进行的,不管是本地Actor还是远程Actor通信方式、操作都是一致的;

  持久性:Actor的状态、收到的消息可被持久化,并可在Actor启动或重启时恢复状态与消息,不管是JVM崩溃或是节点迁移都适用;

  下面通过一个Akka程序,然后结束本篇文章;

/**
* Created by linx on 2016-06-26.
*/
class Greeter extends Actor { override def receive: Receive = {
case "greet" =>
println("hello world")
val hello = context.actorOf(Props[HelloWorld], "hello")
hello ! "done"
}
}
/**
* Created by linx on 2016-06-26.
*/
class HelloWorld extends Actor { override def receive: Receive = {
case "done" =>
println("done")
context.system.shutdown()
}
}
/**
* Created by linx on 2016-06-26.
*/
object Main {
def main(args: Array[String]): Unit = {
val system = ActorSystem("hello")
val greeter = system.actorOf(Props[Greeter], "greeter")
greeter ! "greet"
}
}

  程序先创建一个Greeter Actor然后往该Actor发送“greet”字符串,Greeter Actor收到后打印Hello World,然后创建HelloWorld Actor并发送done,HelloWorld结束整个程序;

程序运行结果:

参考资料:

http://doc.akka.io/docs/akka/2.4.7/scala.html

http://www.solinx.co/archives/464

文章首发地址:Solinx

http://www.solinx.co/archives/612

Akka初步介绍的更多相关文章

  1. 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍

    我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...

  2. 三、Android学习第三天——Activity的布局初步介绍(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 三.Android学习第三天——Activity的布局初步介绍 今天总结下 ...

  3. mxgraph进阶(二)mxgraph的初步介绍与开发入门

    mxgraph的初步介绍与开发入门 前言 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连接相邻动作的弧上标有执行此次相邻动作的频次.为此,在大师兄徐凯 ...

  4. Akka详细介绍

    AKKA NOTES - 介绍演员 任何在过去做过多线程的人都不会否认管理多线程应用程序有多么困难和痛苦.我说管理因为它开始很简单,一旦你开始看到性能改进,它变得非常有趣.但是,当您发现没有更简单的方 ...

  5. 新浪微博API使用初步介绍——解决回调地址的问题

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #新浪微博API使用初步介绍——解决回调地址的问题 #http://blog.csdn.net/monsion ...

  6. Html/CSS 初步介绍html和css部分重要标签

    &初步介绍html和css部分重要标签& 注:开头书写:<!DOCTYPE html>表明对应标准html代码 先行总结重点 下方给出具体 CSS: 1. position ...

  7. Django 小实例S1 简易学生选课管理系统 0 初步介绍与演示

    Django 小实例S1 简易学生选课管理系统 第0章--初步介绍与演示 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 初步介绍 先介绍下这个 ...

  8. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  9. ABP开发框架前后端开发系列---(2)框架的初步介绍

    在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...

随机推荐

  1. CSS权威指南之css声明,伪类,文本处理--(简要笔记一)

    1.css层叠的含义 后面的会覆盖前面的样式 2.每个元素生成一个框,也称盒.   3.替换元素和非替换元素. img如果不指定src的外部路径,该元素就没有意义.他由文档本身之外的一个图像文件来替换 ...

  2. 《ES6基础教程》之 map、forEach、filter indexOf 用法

    1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(42)-工作流设计-表建立

    系列目录 工作流在实际应用中还是比较广泛,网络中存在很多工作流的图形化插件,可以做到拉拽的工作流设计,非常简便,再配合第三方编辑器,可以直接生成表单,我没有刻意的浏览很多工作流的实际设计,我认为工作流 ...

  4. AJAX POST&跨域 解决方案 - CORS

    一晃又到新年了,于是开始着手好好整理下自己的文档,顺便把一些自认为有意义的放在博客上,记录成点的点滴.          跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是 ...

  5. CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  6. 【分布式】Zookeeper服务端启动

    一.前言 前面已经了解了Zookeeper会话相关知识点,接着来学习Zookeeper服务端相关细节. 二.服务端 服务端整体架构如下 Zookeeper服务器的启动,大致可以分为以下五个步骤 1. ...

  7. C#基础回顾(一)—C#访问修饰符

    一.写在前面的话 好久没有停下来总结自己,转眼间15年过去好些天,回首过去的日子,亦或失去,亦或所得!生活的节奏,常常让我们带着急急忙忙的节奏去追赶,也许这并不是每个人所期望的生活方式!于他人,于自己 ...

  8. Java I/O and NIO [reproduced]

    Java I/O and NIO.2---Five ways to maximize Java NIO and NIO.2---Build more responsive Java applicati ...

  9. UEditor百度富文本编辑器--preview在线预览时头部被挡住的解决方案

    问题截图: 正常情况应该是如下显示: 解决方案: 1.打开ueditor/dialogs/preview/preview.html 2.找到body节点下面这一句 document.getElemen ...

  10. 节省Json流量

    今天在实验当中发现了很不错的节省json流量方式,来做个笔记给大家分享一下. 如果跟服务器传递键值对的数组,我们一般会采用下面方式 创建一个字段 public class kv { public st ...