Machine: 4 cores with multithreading.

Default Thread Pool

Default thread pool settings:

akka.actor{
    default-dispatcher {
        type = "Dispatcher"
        executor = "fork-join-executor"

        fork-join-executor {
            parallelism-min = 8
            parallelism-factor = 3.0
            parallelism-max = 64
            task-peeking-mode = "FIFO"
        }

        thread-pool-executor {
            keep-alive-time = 60s
            core-pool-size-min = 8
            core-pool-size-factor = 3.0
            core-pool-size-max = 64
            max-pool-size-min = 8
            max-pool-size-factor  = 3.0
            max-pool-size-max = 64
            task-queue-size = -1
            task-queue-type = "linked"

            allow-core-timeout = on
        }
    }
}

Code

object DefaultSystemThreadPool {

  def main(args: Array[String]): Unit = {
    val system=ActorSystem("ExperimentDefaultThreadPool")
    val e1=system.actorOf(Props[Example1],"example1Actor")
    StdIn.readLine()

    (1 to 100000).foreach{i=>
      e1 ! s"msg$i"
    }

    e1 ! DisplayThreads

    StdIn.readLine()
    system.terminate()

  }

  class Example1 extends Actor{

    var threadsNames=Set[String]()

    override def receive: Receive = {
      case DisplayThreads =>
      println("Example 1 Actor was working in threads")
      threadsNames.foreach(println)

      case msg =>
        threadsNames=threadsNames + Thread.currentThread.getName
        println(s"example1 received $msg")
    }
  }

  object Example1{
    case object DisplayThreads
  }

}

After start without sending any messages

  • 1 scheduler
  • 3 dispatcher threads
  • after one minute of no activity first dispatcher thread was stopped

results matching ""

    No results matching ""