source: doc/theses/colby_parsons_MMAth/benchmarks/actors/akka/SendDynamic/AkkaSendDynamic.scala @ 6e1e2d0

ADTast-experimental
Last change on this file since 6e1e2d0 was 5adf4f4, checked in by caparson <caparson@…>, 16 months ago

added caf/uC++/proto benchmarks

  • Property mode set to 100644
File size: 2.6 KB
Line 
1import akka.actor.typed.scaladsl.Behaviors
2import akka.actor.typed.scaladsl.LoggerOps
3import akka.actor.typed.{ ActorRef, ActorSystem, Behavior }
4import java.util.concurrent.atomic.AtomicInteger
5import akka.event.Logging
6import akka.actor.typed.DispatcherSelector
7import java.util.concurrent.Semaphore
8
9object DynamicActor {
10        final case class Dummy( cnt: Int )
11
12        def apply(): Behavior[Dummy] = Behaviors.receive { (context, message) =>
13                if ( message.cnt >= DynamicMain.times ) {
14                        if ( DynamicMain.trials.get() > 0 ) {           // ignore trial 1
15                                println( s"${(System.nanoTime() - DynamicMain.startTime) / DynamicMain.times}" )
16                // println( s"${DynamicMain.times} ${(System.nanoTime() - DynamicMain.startTime) * 1E-9}s" )
17                        } // if
18                        if ( DynamicMain.trials.incrementAndGet() == DynamicMain.NumTrials + 1 ) {
19                                DynamicMain.system ! DynamicMain.Stop()
20                        } else {
21                                DynamicMain.startTime = System.nanoTime() // reset for next trial
22                                context.self ! Dummy( 0 )
23                        } // if
24                        Behaviors.same
25                } else {
26                        DynamicMain.system ! DynamicMain.Start( message.cnt + 1 )
27                        Behaviors.stopped
28                }
29        }
30}
31
32object DynamicMain {
33        sealed trait MainMessages
34        final case class Start( cnt: Int ) extends MainMessages
35        final case class Stop() extends MainMessages
36
37        val trials = new AtomicInteger(0)
38    val sem = new Semaphore(0)
39
40        var actor_cnt = 0;
41        var system : ActorSystem[MainMessages] = null
42        var startTime = System.nanoTime()
43        var times = 2_000_000; var NumTrials = 5
44
45        def apply(): Behavior[MainMessages] = Behaviors.setup { context =>
46        Behaviors.receiveMessage { message =>
47                        message match {
48                                case Start( cnt: Int ) =>
49                                        val actor = context.spawn(DynamicActor(), "actor_" + actor_cnt , DispatcherSelector.fromConfig("akka.dispatcher"))
50                                        actor_cnt += 1
51                                        actor ! DynamicActor.Dummy( cnt )                                       
52                                        Behaviors.same
53                                case Stop() =>
54                    sem.release()
55                                        Behaviors.stopped
56                        }
57        }
58    }
59
60        def main( args: Array[String] ): Unit = {
61                def usage() = {
62                        println( "Usage: [ times (> 0) ]" );
63                        System.exit( 0 );
64                }
65
66                args.length match {
67          case 2 =>
68            if ( args(1) != "d" ) { NumTrials = args(1).toInt }
69                        if ( args(0) != "d" ) { times = args(0).toInt }
70                        if ( times < 1 ) usage()
71                  case 1 =>
72                        if ( args(0) != "d" ) { times = args(0).toInt }
73                        if ( times < 1 ) usage()
74                  case 0 =>
75                  case _ =>
76                        usage()
77                } // match
78
79                system = ActorSystem( DynamicMain(), "Dynamic" )
80                system ! Start( 0 )
81        sem.acquire()
82        }
83}
84
85// Local Variables: //
86// tab-width: 4 //
87// mode: java //
88// compile-command: "sbt --warn -J-Xmx32g \"run\"" //
89// End: //
Note: See TracBrowser for help on using the repository browser.