手动敲了一遍计算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. STL_iterator迭代器(1)——迭代器的分类

    一.容器迭代器 尽管C++指针也是迭代器,但用的更多的是容器迭代器.容器迭代器用法和iterdemo.cpp一样,但和将迭代器申明为指针变量不同的是,你可以使用容器类方法来获取迭代器对象.两个典型的容 ...

  2. java cmd常用命令

    熟悉Java的常用命令 面试例题11:使用jar命令. 请使用jar命令,将test文件夹压缩成.jar文件,并简述其压缩包的结构. 考点:对于Java程序员来说,更多情况下是使用集成Java开发工具 ...

  3. 机房管理系统——vb与excel链接2

    因为我之前找的文档让我以为在创建表里面走了非常大的误区,所以当时我直接就在学生管理系统的目录里建了张表,执行时候直接打开这样表即可了. 可是这里面还是存在着非常大的误区. 后来我看了周坤的博客感觉他比 ...

  4. apache利用.htaccess实现部分页面301

    由于网站改版,对访问url进行了改进 原:http://www.tutufu.com/w_weifenlei/DeHaiZi_38251/ 现:http://www.tutufu.com/unclas ...

  5. ViewPager 详解(四)----自主实现滑动指示条

    前言:前面我们用了三篇的时间讲述了有关ViewPager的基础知识,到这篇就要进入点实际的了.在第三篇<ViewPager 详解(三)---PagerTabStrip与PagerTitleStr ...

  6. 斐波那契数列(fabnacci)java实现

    斐波那契数列定义:From Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/Fibonacci_number In math ...

  7. Java基础知识强化80:Math类random()方法的小扩展(控制产生目的数字的概率)

    1. Math.random()方法: Math.random()出现的数据是0.0<= x < 1.0之间,随机出现一个数据Math.random()>0.1概率是0.9 那么如下 ...

  8. C++ STL set集合容器

    汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ #include ...

  9. Java分页类 Page

    import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Iterator; ...

  10. CSS优先级总结(转载)

    样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External styl ...