Akka
异步处理框架,自己Google
前期准备:
idea12(http://www.jetbrains.com/idea/)
在插件库中下载SBT,SCALA插件(Intellij Idea->Preferences...->Plugins)
下载SBT0(0.12)必须这么版本因为SBT-IDEA这个插件需要这个版本;
1.设置SBT:
设置IDE-SETING中的SBT-LAUNCHER的路径即可
实例介绍:
计算圆周率Pi,算法如下:
算法实现:假设N为100000,我们可以把它分成多段比如10000一个处理线程,多个线程并发处理,最后把这十个线程的结果加起来就是Pi的值。在分布式的环境中,我们可以把这些线程放在不同机器上,同时并发处理,这样会获得更高的性能。在Akka里面要实现上述逻辑是相当简单的。下面我们来详细看看怎么在Idea环境中编写上诉代码。
项目搭建
1.新建Scala项目,设置项目路径和ScalaHome的路径
3.在项目根目录下创建buid.sbt文件,内容如下:
name := "hello" version := "1.0" scalaVersion := "2.9.2" resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/" libraryDependencies += "com.typesafe.akka" % "akka-actor" % "2.0.2"
注意:每一行内容需要空一行,否则编译不错
2.增加插件,sbt-idea.
项目目录下新建文件夹:project,在project目录下新建文件plugins.sbt,内容如下:
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0")
3.点开左下角的SBT控制台,点击绿色的运行按钮,请耐心等待,SBT将会下载一堆有的没得,不知道什么原因在我的环境在居然搞了快2个小时
4.运行gen-idea命令,sbt将会生成IDEA的项目文件,重新载入项目,至此SCALA+SBT的环境就搭建好了,可以开始编码了。我在运行时还碰到一个小问题,就是hello-build模块的编译输出路径和测试输出路径一样,导致scala无法编译通过,只需要修改Scala的编译测试输出路径即可。
回到刚才的例子:
我将会用两个Actor来完成这个工作。Worker(工作线程,完成分段计算),Master(主线程,完成分段线程的划分,调度,结果合并,打印),下面来看看代码:
package main.scala import akka.actor.{ActorSystem, Props, Actor} import akka.routing.RoundRobinRouter /** * Created with IntelliJ IDEA. * User: criss * Date: 13-2-21 * Time: 上午1:37 * To change this template use File | Settings | File Templates. */ object Pi extends App { //Actor传递消息特质,所有的消息都实现这个特质 sealed trait PieMessage //工作线程的运行指令,start:分段开始的值,nrOfElements:本段的数目 case class Work(start: Int, nrOfElements: Int) extends PieMessage //工作线程结果返回指令 case class Result(value:Double) extends PieMessage //主线程运行指令 case object Calculate extends PieMessage caculate(10000,10,10000) class Worker extends Actor { def caculate(start:Int,nf:Int) = { var acc:Double = 0.0 //计算start到start+nf的数值,详见上面公式 for (i <- start until start+nf) { acc += 4.0 * (1 - (i % 2) * 2) / (2 * i + 1) } acc } def receive = { //处理运行指令 case Work(start, nfOfElement) => //返回给主线程结果 sender ! Result(caculate(start,nfOfElement)) } } //nrOfMesseage 工作线程数 //nfWorks工作线程调度池的大小 //nrOfElements每个工作线程计算的数值大小 class Master(nrOfMesseage:Int,nfWorks:Int,nrOfElements:Int) extends Actor { //最后的结果 var pi:Double = _ //计数,计算已经运行完多少个Worker var nrOfResults:Int = 0 //你可以理解成一个线程池,用于调度Worker val workerRouter = context.actorOf( Props[Worker].withRouter(RoundRobinRouter(nfWorks)),name="workers" ) //存储开始时间 var start:Long = _ def receive = { case Calculate => start = System.currentTimeMillis; for (i <- 0 until nrOfMesseage) workerRouter ! Work(i*nrOfElements,nrOfElements) case Result(value) => //当有一个结果返回时,合并结果 pi += value //计算当前返回的结果总数 nrOfResults += 1 //当全部结果返回时,打印结果退出 if(nrOfResults == nrOfMesseage) { println(pi) println("耗时:"+(System.currentTimeMillis()-start)) context.system.shutdown() } } } def caculate(nrOfMesseage:Int,nfWorks:Int,nrOfElements:Int) { //初始化ActorSystem val system = ActorSystem("PiSystem") //初始化主线程 val master = system.actorOf(Props(new Master(nrOfMesseage ,nfWorks,nrOfElements)),name="master") //发送计算指令 master ! Calculate } }
相关推荐
本教程将详细介绍如何在IntelliJ IDEA中使用SBT来构建一个基于AKKA框架的Scala程序。 首先,你需要确保已经安装了IntelliJ IDEA和Scala插件。如果尚未安装,可以从官方网站下载并按照提示进行安装。同时,确保你的...
Akka是一个用Scala和Java编写的库,用于构建并发、分布式以及容错的事件驱动应用。Akka框架借鉴了Erlang的并发模型,但它是建立在JVM之上,并且提供了丰富的抽象和工具,能够简化开发工作。 标题“Akka Scala 学习...
至于"akka-quickstart-scala"这个文件,很可能是Akka的Scala快速入门示例,其中可能包含了如何创建和交互Actor、配置Actor系统、处理消息以及实现简单的并发和分布式应用的代码示例。通过学习和实践这些示例,开发者...
在使用Scala Play框架和sbt的过程中,还有几个关键知识点: - **路由系统**:Play框架的路由文件定义了URL模式如何映射到控制器方法,这是实现RESTful API的关键部分。 - **模板引擎**:Play支持Erb-like的模板语言...
详情介绍:https://www.yuque.com/sxbn/ks/100010261 基于akka与scala实现一个简单rpc框架 RPC,即 Remote Procedure Call(远程过程调用)。
mDialog 是一家使用 Scala/Akka 的公司, 为主流出版商提供视频广告插入软件。这家公司最终被 Google 收购。他同时还是一名很 有影响力的“技术控”,将 Akka 引入加拿大一家主要的电信公司,帮助该公司为客户提 供...
附件里是我写的利用scala语言对akka集群操作的入门例子,包含了akka cluster 节点启动、节点注册、节点剔除、节点通信等功能,亲测可用。附件里共有两个文件,一个为scala编写的操作源代码,一个为相关的资源文件。
标题中的“用Scala写的akka actor简单demo”指的是一个使用Scala编程语言编写的Akka Actor系统的基本示例。Akka是轻量级、基于actor模型的框架,它用于构建高度并发、分布式和容错的应用程序。Scala是多范式编程语言...
### Akka 学习入门实践知识点详解 #### 一、Akka 概述 - **定义**:Akka 是一个用于构建高度并发、分布式、容错性应用的工具包,适用于 Java 和 Scala 开发者。它基于 Actor 模型,支持响应式编程范式。 - **目标**...
Akka正是用Scala编写的,并且充分展示了Scala在并发编程方面的优势。 #### 2. Akka的核心概念:Actor模型 - **Actor模型**:在Akka中,Actor是最基本的并发单元。每个Actor都独立运行并且通过消息传递与其他Actor...
akka scala 实现求连续平方和,分布式计算,快速理解分布式计算原理!
Akka是用于在JVM上构建高并发、分布式和容错事件驱动应用程序的工具包和运行时环境... Akka可以与Java和Scala一起使用。Actor是Akka的执行单位。 Actor模型是一种抽象,可以更容易地编写正确的并发,并行和分布式系统。
1. 打开IntelliJ IDEA:启动IDE,如果你还没有安装,可以从官方网站下载最新版本的IntelliJ IDEA社区版或Ultimate版,两者都支持Scala开发。 2. 安装插件:启动IDE后,点击顶部菜单栏的“File” > “Settings”...
阿卡聊天使用 Akka 和 Scala 的简单聊天服务器。1. 第一个版本演员 ChatServer:加入和离开聊天组,向所有当前聊天成员广播传入消息演员 ChatClient:加入聊天组,广播第一条介绍信息ChatApp:首先运行具有三个 ...
### Akka Scala 知识点概述 #### 一、引言 **Akka Scala** 是一个基于Actor模型的工具包,适用于构建高度并发、分布式且容错的应用程序。Akka Scala 不仅支持Scala语言,还提供了对Java的支持,使得开发者能够利用...
《Akka Scala文档2.4版详解》 Akka是一个高度可扩展的并行和分布式计算框架,专为Java和Scala设计。它基于Actor模型,提供了强大的并发处理能力,能够帮助开发者构建高度可靠且高性能的应用程序。在Akka Scala ...
Akka是JAVA虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和...Akka用Scala语言写成,同时提供了Scala和JAVA的开发接口。 Akka处理并发的方法基于Actor模型。在Akka里,Actor之间通信的唯一机制就是消息传递。
Akka-Serial是一个专门为Akka和Scala设计的反应式串行通信库,它提供了一种高效、非阻塞的方式来处理串行端口通信。Akka是基于actor模型的并发框架,而Scala则是一种多范式的编程语言,两者结合使得Akka-Serial能够...
Akka框架就是用Scala编写的,因此,使用Scala来编写Akka应用程序可以充分利用语言的强大特性和表达能力,如类型安全、模式匹配和高阶函数等。 在"响应式架构 消息模式Actor实现与Scala.Akka应用集成"这个主题中,...
Harness reactive programming to build scalable and fault-tolerant distributed systems using Scala and Akka About This Book Use the concepts of reactive programming to build distributed systems ...