Skip to content
Evaluation of API and performance of different actor libraries
Scala Shell Batchfile
Find file
Failed to load latest commit information.
project Update versions of dependencies and build plugins + clean up of build…
src/test/scala remove latency correction + update Akka version to 2.4.0 + update tes…
.gitignore restored Akka tests, added initial (non proprly working) sbt build
.travis.yml Remove openjdk8 build option because it is not supported on Travis CI
LICENSE re #5 minor refining
README.md add latency histogram for ping latency test + update of benchmark result
build.sbt remove latency correction + update Akka version to 2.4.0 + update tes…
circle.yml Add Circle CI badge and switch to Oracle JDK 8
mvnAll.bat Fix misprint in a benchmark param
mvnAll.sh
mvnAll_poolSize1.bat Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize1.sh Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize10.bat Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize10.sh Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize100.bat Remove ThreadPoolExecutor with LinkedTransferQueue
mvnAll_poolSize100.sh Remove ThreadPoolExecutor with LinkedTransferQueue
out0.txt remove latency correction + update Akka version to 2.4.0 + update tes…
out0_poolSize1.txt remove latency correction + update Akka version to 2.4.0 + update tes…
out0_poolSize10.txt remove latency correction + update Akka version to 2.4.0 + update tes…
out0_poolSize100.txt remove latency correction + update Akka version to 2.4.0 + update tes…
pom.xml remove latency correction + update Akka version to 2.4.0 + update tes…
run_tests_osx.sh Remove Java 7 support
sbtAll.bat Remove ThreadPoolExecutor with LinkedTransferQueue
sbtAll.sh Remove ThreadPoolExecutor with LinkedTransferQueue
shippable.yml Remove openjdk8 build option because it is not supported on Travis CI
wercker.yml

README.md

  ☆ノノハ
  从*’w’)
(つactorsと)

Evaluation of API and performance of in-memory messaging for different actor implementations written on Scala: Akka vs. Lift vs. Scala vs. Scalaz

This project provides and tests alternative implementations of Minimalist actor and bounded/unbounded mailboxes for Akka: Akka vs. Minimalist Scala Actor also it provides alternative fork-join tasks which greatly increase efficiency of actors and examples of their usage with Lift, Scala & Scalaz actors.

Travis CI Build Status

Wercker Build Status

Circle CI Build Status

Gitter

Benchmarks and their goals

  • Enqueueing - memory footprint of internal actor queue per submitted message and submition throughput in a single thread
  • Dequeueing - message handling throughput in a single thread
  • Initiation - memory footprint of minimal actors and initiation time in a single thread
  • Single-producer sending - throughput of message sending from external thread to an actor
  • Multi-producer sending - throughput of message sending from several external threads to an actor
  • Max throughput - throughput of message sending from several external threads to several actors
  • Ping latency - average latency of sending of a ping message between two actors
  • Ping throughput 10K - throughput of executor service by sending of a ping message between 10K pairs of actors
  • Overflow throughput - throughput of overflow handing for bounded version of actors

Hardware required

  • CPU: 2 cores or more
  • RAM: 6Gb or greater

Software installed required

  • JDK: 1.8.0_x
  • Maven: 3.x or sbt: 0.13.x

Building & running benchmarks

Use following command-line instructions to build from sources and run benchmarks with Scala's ForkJoinPool in FIFO mode:

mvn -B clean test >outX.txt

or

sbt clean test >outX.txt

Use mvnAll.sh or sbtAll.sh scripts (for Windows: mvnAll.bat or sbtAll.bat) to run benchmarks for the following types of executor services:

  • akka-forkjoin-pool for akka.dispatch.ForkJoinExecutorConfigurator.AkkaForkJoinPool
  • scala-forkjoin-pool for scala.concurrent.forkjoin.ForkJoinPool
  • java-forkjoin-pool for java.util.concurrent.ForkJoinPool
  • abq-thread-pool for java.util.concurrent.ThreadPoolExecutor with java.util.concurrent.ArrayBlockingQueue
  • lbq-thread-pool for java.util.concurrent.ThreadPoolExecutor with java.util.concurrent.LinkedBlockingQueue

Recommended values of JVM options which can be set for MAVEN_OPTS and SBT_OPTS system variables:

-server -Xms1g -Xmx1g -Xss1m -XX:NewSize=512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+TieredCompilation -XX:+UseG1GC -XX:+UseNUMA -XX:-UseBiasedLocking -XX:+AlwaysPreTouch

Known issues

  1. Benchmark freeze with Java ForkJoinPool baked by 1 thread on 8u40, 8u45, 8u51 and some early 8u60 ea builds, please see details here: https://bugs.openjdk.java.net/browse/JDK-8078490

W/A is to upgrade to latest Java 8 build (8u60-b27 or above) or to use latest jsr166.jar (link to download http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166.jar) in working directory with following JVM option to pick it up: -Xbootclasspath/p:jsr166.jar

Test result descriptions

Results of running mvnAll.bat or mvnAll.sh scripts on different environments with pool size (or number of worker threads) set to number of available processors, 1, 10 or 100 values accordingly:

out0*.txt

Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz (max 3.50GHz), RAM 12Gb DDR3-1333, Ubuntu 14.10, Oracle JDK 1.8.0_60-b27 64-bit

Something went wrong with that request. Please try again.