手动敲了一遍计算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

最新文章

  1. C学习笔记
  2. 学习(主题或切入点)checklist1
  3. Style file: generic.xaml
  4. 软技能:十步学习法 (zhuan)
  5. C51 库函数(2)
  6. Node.js 之 express 入门 ejs include公共部分
  7. pc2日记——有惊无险的第二天2014/08/29
  8. struts2框架-----Action
  9. Vue.js学习使用心得(四)——组件
  10. squid代理http和https方式上网的操作记录
  11. hdu1540
  12. SQL Server - 使用 Merge 语句实现表数据之间的对比同步
  13. service层代码相互调用, 导致spring循环依赖,设计上的优化
  14. 前端开发笔记(3)css基础(中)
  15. MaterialRefreshLayout+ListView 下拉刷新 上拉加载
  16. 【教程】【FLEX】#005 拖动
  17. 使用heroku创建应用时报错 heroku does not appear to be a git repository
  18. Tomcat+JDK安装和配置
  19. three.js入门系列之材质
  20. Blocks to Cubes

热门文章

  1. date命令使用总结【转载】
  2. HDU 4828 - Grids (Catalan数)
  3. L1签证_百度百科
  4. Java NIO 和 IO 的区别详解
  5. oracle-TNS是什么?
  6. 转:ORM框架
  7. Byte[]、Image、Bitmap_之间的相互转换
  8. Unity3D AssentStore 下载的package存放目录(WinXP,Win8,Mac OS X)
  9. TeamViewer或者向日葵等无法成功远程登录
  10. PHP5.4新特性(转)