Created
January 28, 2010 16:52
-
-
Save Arbow/288912 to your computer and use it in GitHub Desktop.
Scala message send/receive benchmark
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import scala.actors.{Actor} | |
import scala.actors.Actor._ | |
import java.util.concurrent.CountDownLatch | |
object Main { | |
val PROCESSER_COUNT=Runtime.getRuntime().availableProcessors() | |
var perThreadRequests=10000 | |
var request_count=PROCESSER_COUNT * perThreadRequests | |
var processorLatch=new CountDownLatch(request_count) | |
def main(args : Array[String]) : Unit = { | |
if(args.length==1){ | |
perThreadRequests = Integer.parseInt(args(0)); | |
request_count = PROCESSER_COUNT * perThreadRequests; | |
processorLatch = new CountDownLatch(request_count); | |
} | |
System.setProperty("actors.maxPoolSize",(PROCESSER_COUNT*2).toString) | |
println("=========Scala Version========="); | |
println(" Receive Task Count: "+PROCESSER_COUNT); | |
println(" Requests Per Receive Task: "+perThreadRequests); | |
println(" Request Counts: "+request_count) | |
val beginTime=System.currentTimeMillis(); | |
var i=0 | |
for (i<- 0 to PROCESSER_COUNT) { | |
var actor=new ReceiveActor | |
actor.start | |
actor ! "GO" | |
} | |
processorLatch.await(); | |
val consumeTime=System.currentTimeMillis()-beginTime | |
println("Consume Time: "+consumeTime+" ms") | |
println("TPS About: "+request_count*1000/consumeTime) | |
println("=========Scala Version=========") | |
System.exit(0) | |
} | |
class ReceiveActor extends Actor{ | |
def act(){ | |
react{ | |
case _ => { | |
var i=0 | |
for(i<- 0 to perThreadRequests){ | |
val actor=new ProcessorActor | |
actor.start | |
actor ! 0 | |
} | |
exit | |
} | |
} | |
} | |
} | |
class ProcessorActor extends Actor{ | |
def act(){ | |
loop { | |
react { | |
case command:Int => | |
if (command == 10) | |
processorLatch.countDown | |
else { | |
val actor=new AsyncProcessorActor() | |
actor.start | |
actor ! command+1 | |
} | |
} | |
} | |
} | |
} | |
} | |
class AsyncProcessorActor extends Actor{ | |
def act(){ | |
react{ | |
case command:Int => { | |
handle(command) | |
} | |
} | |
} | |
def handle(command:Int){ | |
var strBuilder=new StringBuilder | |
var i=0 | |
for (i<- 0 to 1000) { | |
strBuilder.append("ArrayList["); | |
strBuilder.append(i); | |
strBuilder.append("];"); | |
} | |
sender ! command | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment