Created
July 2, 2013 08:01
-
-
Save AlecZorab/5907515 to your computer and use it in GitHub Desktop.
JVM 1.7.21, -server -ms2g -mx2g -XX:+UseG1GC -XX:+AggressiveOpts
Akka 2.2.0-RC2, SingleConsumerOnlyUnboundedMailbox, fork-join-executor, pmax = pmin = 2, throughput 1024
This file contains 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
handled 1000000 messages in 68.917303ms | |
handled 1000000 messages in 51.064434ms | |
handled 1000000 messages in 77.18446ms | |
handled 1000000 messages in 79.364979ms | |
handled 1000000 messages in 72.436795ms | |
handled 1000000 messages in 79.938059ms | |
handled 1000000 messages in 76.635481ms | |
handled 1000000 messages in 82.522278ms | |
handled 1000000 messages in 76.44066ms | |
handled 1000000 messages in 69.09773ms | |
handled 1000000 messages in 66.375261ms | |
handled 1000000 messages in 70.112672ms | |
handled 1000000 messages in 72.533536ms | |
handled 1000000 messages in 75.186376ms | |
handled 1000000 messages in 74.908205ms | |
handled 1000000 messages in 69.162334ms | |
handled 1000000 messages in 63.679908ms | |
handled 1000000 messages in 53.216499ms | |
handled 1000000 messages in 52.448933ms | |
handled 1000000 messages in 53.584047ms | |
handled 1000000 messages in 56.885956ms | |
handled 1000000 messages in 50.745088ms | |
handled 1000000 messages in 54.431952ms | |
handled 1000000 messages in 38.539675ms | |
handled 1000000 messages in 54.582922ms | |
handled 1000000 messages in 50.359798ms | |
handled 1000000 messages in 56.284422ms | |
handled 1000000 messages in 53.97101ms |
This file contains 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
package test; | |
import java.util.concurrent.ConcurrentLinkedQueue; | |
import java.util.concurrent.ExecutorService; | |
import java.util.concurrent.Executors; | |
public class CLQTest { | |
public static void main(String[] args) throws InterruptedException { | |
ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue(); | |
ExecutorService exe = Executors.newFixedThreadPool(2); | |
//can't be bothered to actually signal completion between them, but eyeballing the numbers, this is plenty of time. | |
while (true) { | |
Producer p = new Producer(queue); | |
Consumer c = new Consumer(queue); | |
exe.submit(p); | |
exe.submit(c); | |
Thread.sleep(1000); | |
} | |
} | |
static class Producer implements Runnable { | |
private final ConcurrentLinkedQueue queue; | |
Producer(ConcurrentLinkedQueue queue) { | |
this.queue = queue; | |
} | |
@Override | |
public void run() { | |
for (int i = 0; i < 1000000; i++) | |
queue.add("Hello"); | |
} | |
} | |
static class Consumer implements Runnable { | |
private final ConcurrentLinkedQueue queue; | |
Consumer(ConcurrentLinkedQueue queue) { | |
this.queue = queue; | |
} | |
@Override | |
public void run() { | |
long t0 = System.nanoTime(); | |
long counter = 0; | |
while (true) { | |
final Object poll = queue.poll(); | |
if (poll != null) { | |
counter++; | |
if (counter >= 1000000) { | |
break; | |
} | |
} | |
} | |
long total = System.nanoTime() - t0; | |
System.out.println("handled " + counter + " messages in " + (total / 1e6) + "ms"); | |
} | |
} | |
} |
This file contains 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
handled 1000000 messages in 235.564945 ms | |
handled 1000000 messages in 127.227591 ms | |
handled 1000000 messages in 124.606216 ms | |
handled 1000000 messages in 128.309483 ms | |
handled 1000000 messages in 237.409046 ms | |
handled 1000000 messages in 140.638416 ms | |
handled 1000000 messages in 143.160038 ms | |
handled 1000000 messages in 125.314199 ms | |
handled 1000000 messages in 134.986944 ms | |
handled 1000000 messages in 204.166015 ms | |
handled 1000000 messages in 117.784481 ms | |
handled 1000000 messages in 125.146492 ms | |
handled 1000000 messages in 120.205680 ms | |
handled 1000000 messages in 119.594104 ms | |
handled 1000000 messages in 126.132311 ms | |
handled 1000000 messages in 107.052943 ms | |
handled 1000000 messages in 107.521918 ms | |
handled 1000000 messages in 111.651647 ms | |
handled 1000000 messages in 109.774072 ms | |
handled 1000000 messages in 156.049667 ms | |
handled 1000000 messages in 114.557220 ms | |
handled 1000000 messages in 117.563215 ms | |
handled 1000000 messages in 115.042932 ms | |
handled 1000000 messages in 124.419429 ms | |
handled 1000000 messages in 126.480444 ms | |
handled 1000000 messages in 138.234623 ms | |
handled 1000000 messages in 130.197770 ms | |
handled 1000000 messages in 141.836128 ms | |
handled 1000000 messages in 134.271262 ms | |
handled 1000000 messages in 134.196949 ms | |
handled 1000000 messages in 127.994824 ms | |
handled 1000000 messages in 138.416389 ms | |
handled 1000000 messages in 137.241105 ms | |
handled 1000000 messages in 128.165878 ms | |
handled 1000000 messages in 129.749214 ms | |
handled 1000000 messages in 130.301875 ms | |
handled 1000000 messages in 132.719057 ms | |
handled 1000000 messages in 133.556250 ms |
This file contains 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
package test | |
import akka.actor.{ActorRef, Props, ActorSystem, Actor} | |
object AkkaPerfTest { | |
def main(args: Array[String]) { | |
val system = ActorSystem() | |
val cActor = system.actorOf(Props(new ConsumerActor)) | |
val pActor = system.actorOf(Props(new ProducerActor(cActor))) | |
pActor ! Run(1000000) | |
} | |
} | |
class ProducerActor(target: ActorRef) extends Actor { | |
def receive = { | |
case Run(msgs) => | |
for (i <- 1L to msgs) target ! Work | |
target ! Done | |
case Report(msg) => | |
println(msg) | |
self ! Run(1000000) | |
} | |
} | |
class ConsumerActor extends Actor { | |
var startTime = 0L | |
var msgCount = 0L | |
def receive = { | |
case Work => | |
if (startTime == 0L) startTime = System.nanoTime() | |
msgCount += 1 | |
case Done => | |
val endTime = System.nanoTime() | |
val elapsedTime = endTime - startTime | |
sender ! Report(f"handled $msgCount messages in ${elapsedTime / 1e6}%2f ms") | |
startTime = 0L | |
msgCount = 0L | |
} | |
} | |
case class Run(msgs: Long) | |
case object Work | |
case object Done | |
case class Report(report: String) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment