手动敲了一遍计算pi的示例:http://www.gtan.com/akka_doc/intro/getting-started-first-scala.html

有个笔误,花了半个小时定位。

 [Torstani@sparkb5-i ~/akka_example/pi]$ cat src/Pi.scala
package akka.tutorial.first.scala
import akka.actor._
import akka.routing.RoundRobinRouter
import scala.concurrent.duration._ object Pi extends App{
calculate(nrOfWorkers=4, nrOfElements=1000, nrOfMessages=10000)
sealed trait PiMessage
case object Calculate extends PiMessage
case class Work(stat:Int, nrOfElements: Int) extends PiMessage
case class Result(value: Double) extends PiMessage
case class PiApproximation(pi: Double, duration: Duration) class Worker extends Actor{
def calculatePiFor(start: Int, nrOfElements: Int):Double = {
var acc = 0.0
for(i<- start until (start + nrOfElements))
acc += 4.0 * (1 - (i%2) * 2) / (2 * i + 1)
acc
}
def receive = {
case Work(start, nrOfElements) =>
//println("worker received "+start + ":"+nrOfElements)
val res = calculatePiFor(start, nrOfElements)
sender ! Result(res)
//println("worker send result: "+res)
}
} class Master(nrOfWorkers:Int, nrOfMessages:Int, nrOfElements: Int, listener: ActorRef) extends Actor {
var pi:Double = _
var nrOfResults:Int= _
val start:Long = System.currentTimeMillis val workerRouter = context.actorOf(
Props[Worker].withRouter(RoundRobinRouter(nrOfWorkers)), name="workerRouter")
def receive = {
case Calculate =>
//println("master receive Calculate")
for(i <- 0 until nrOfMessages)
workerRouter ! Work(i*nrOfElements, nrOfElements)
case Result(value) =>
//println("master recieve result: "+value)
pi += value
nrOfResults += 1
if(nrOfResults == nrOfMessages){
listener ! PiApproximation(pi, duration=(System.currentTimeMillis - start).millis)
context.stop(self)
}
}
}
class Listener extends Actor{
def receive = {
case PiApproximation(pi, duration) =>
println("\tpi approximation: \t\t%s\n\tCalculation time: \t%s".format(pi, duration))
context.system.shutdown()
}
}
def calculate(nrOfWorkers:Int, nrOfElements:Int, nrOfMessages:Int) = {
val system = ActorSystem("PiSystem")
val listener = system.actorOf(Props[Listener], name="listener")
val master = system.actorOf(Props(new Master(nrOfWorkers, nrOfMessages, nrOfElements, listener)), name="master")
master ! Calculate
}
}
 [Torstan@sparkb5-i ~/akka_example/pi]$ cat Makefile
SRC_DIR := src
SRC := $(shell find ${SRC_DIR} -name "*.scala")
DIR=remote TARGET := HelloRemote.jar SCALAC := scalac
SCFLAGS := /usr/local/scala-2.10.4/lib/akka-actors.jar .PHONY: all clean all: ${TARGET} ${TARGET}: ${SRC}
${SCALAC} -cp ${SCFLAGS} $^ clean:
${RM} -r ${TARGET} ${DIR}
 [Torstan@sparkb5-i ~/akka_example/pi]$ cat run.sh
#!/bin/bash AKKA_LIB_PATH="/usr/local/akka-2.1.4/lib/akka/" java -cp \
.:/usr/local/scala-2.10.4/lib/scala-library.jar:/usr/local/scala-2.10.4/lib/akka-actors.jar:/usr/local/scala-2.10.4/lib/typesafe-config.jar:${AKKA_LIB_PATH}/akka-remote_2.10-2.1.4.jar:${AKKA_LIB_PATH}/protobuf-java-2.4.1.jar:${AKKA_LIB_PATH}/netty-3.5.8.Final.jar \
akka.tutorial.first.scala.Pi

执行结果:

[Torstan@sparkb5-i ~/akka_example/pi]$ ./run.sh
pi approximation: 3.1415925535897866
Calculation time: 383 milliseconds

akka简单示例-2的更多相关文章

  1. akka简单示例-1

    刚刚开始接触akka,网上找了2个简单示例,并在公司运营机器上尝试,踩了一些坑,在此记录. 1. 本地hello world [torstan@sparkb5-i ~/akka_example/hel ...

  2. AKKA HTTP 简单示例

    AKKA HTTP 简单示例 依赖包: compile("com.typesafe.akka:akka-http_2.13:10.1.8") compile("com.t ...

  3. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  4. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  5. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  7. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  8. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  9. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

随机推荐

  1. ApiDemos--&gt;Views-lists-slow adapter学习

    今天来依照apidemos提供的方法来实现slow loading的效果. 简单说下实现方法: 实现ListView.OnScrollListener ,监听到手势滑动的情况,当处于滚动状态时,将新显 ...

  2. setWillNotDraw和setFillViewport

    Romain Guy write a little info about a ScrollView attribute that is missing  from documentation : An ...

  3. 跨平台传输中使用base64来保证非ascii码字符串的完整性

    首先,我们来看一个例子: byte[] b=new byte[]{2,9,43}; String ss=new String(b,"utf-8"); byte[] b1=ss.ge ...

  4. [转] Python 模块学习:os模块

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...

  5. Laravel 加载 js css image 文件

    写在前面的话: 1.前提是需要使用blade模板引擎 2.css js image 文件夹建在laravel 的 public 目录下面 3.生成的路径默认都是相对路径 A: 加载css文件 (用下面 ...

  6. Lombok介绍及使用方法

    lombok简介 lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特此来推荐一下. lombok的 ...

  7. ref传参时出错

    下面是一段正确的代码: //基类A public class A { public void SomeMethod(A a) { } } //派生类B public class B:A { } //在 ...

  8. 母函数&&排列(模板)

    #include <iostream> #include <algorithm> using namespace std; int main() { int n,i; int ...

  9. AngularJs学习html转义

    MainApp.directive('ngHtml', function () { function watch(scope, el, watchExp){ scope.$watch(watchExp ...

  10. linux的colrm命令

    http://book.51cto.com/art/201107/277853.htm http://book.51cto.com/art/201107/277854.htm