2010-02-04 5 views
4

저는 18 세의 연수생이고 제가 좋아하는 스카라를 발견하고 있습니다 :-). 스칼라 배우들에 익숙해지기 위해서 나는 기어와 컨트롤러가있는 작은 시뮬레이션을 작성했습니다. ActorApplication은 임의의 속도로 N 개의 기어를 만듭니다. 컨트롤러는 동기화 속도를 계산하고 기어 - 액터를 시작합니다. 기어는 단계별로이 주어진 속도와 동기화됩니다 (1+ 또는 1-). 모든 기어가 동기화 속도에 도달하면 시뮬레이션이 완료됩니다. 저는 scala 2.7.7에서 시뮬레이션을 개발했습니다 - 그리고 예상대로 작동했습니다 (아래 출력 참조). 그러나 현재 2.8.0-SNAPSHOT으로 갔을 때 나는 이상한 행동을 발견했다.이상한 행동 : 스칼라 배우 2.7.7 대 2.8 스냅

코드는 상기 스칼라 2.7.7에서 생성

/** 
* Created by IntelliJ IDEA. 
* User: pmei 
*/ 
import actors.Actor 
import actors.Actor._ 
import collection.mutable.ListBuffer 
import java.util.Random 

case class ReceivedSpeed(gear: Gear) 
case class StartSync 

case class SyncGear(controller: GearController, syncSpeed: Int) 

object ActorApplication extends Application { 
    private val random = new Random() //scala.util random won't be random :(

    println("[App] start with creating gears") 
    val gearList = new ListBuffer[Gear]() 
    for (i <- 0 until 100) { 
    gearList += new Gear(i) 
    } 

    val gearController = new GearController(gearList) 

    gearController.start() 
    gearController ! StartSync() 
} 

/** 
* CONTROLLER 
*/ 
class GearController(nGears: ListBuffer[Gear]) extends Actor { 

    private var syncGears = new ListBuffer[Gear] 
    private var syncSpeed = 0 
    def act = { 
    loop { 
     react { 
     case StartSync() => { 
      println("[Controller] Send commands for syncing to gears!") 
      var speeds = new ListBuffer[Int] 
      nGears.foreach(e => speeds += e.speed) 

      //Calc avg 
      //var avgSpeed = speeds.foldLeft(0)(_ + _)/speeds.length 
      //var avgSpeed = speeds.foldLeft(0) { (x, y) => x + y }/speeds.length 
      syncSpeed = (0/:speeds)(_ + _)/speeds.length //Average over all gear speeds 

      println("[Controller] calculated syncSpeed: "+syncSpeed) 
      nGears.foreach{e => 
         e.start() 
         e ! SyncGear(this, syncSpeed) 
      } 
      println("[Controller] started all gears") 
     } 
     case ReceivedSpeed(gear: Gear) => { 
      println("[Controller] Syncspeed received by a gear ("+gear.gearId+")") 
      //println("[Controller] mailboxsize: "+self.mailboxSize) 
      syncGears += gear 
      if(syncGears.length == nGears.length) { 
      println("[Controller] all gears are back in town!") 
      System.exit(0) 
      } 
     } 
     case _ => println("[Controller] No match :(") 
     } 
    } 
    } 
} 

/** 
* GEAR 
*/ 
class Gear(id: Int) extends Actor { 

    private val random = new Random() //scala.util random won't be random :(
    private var mySpeed = random.nextInt(1000) 
    private var myController: GearController = null 

    def speed = mySpeed 
    def gearId = id 

    println("[Gear ("+id+")] created with speed: "+mySpeed) 

    def act = { 
    loop { 
     react { 
     case SyncGear(controller: GearController, syncSpeed: Int) => { 
      //println("[Gear ("+id+")] activated, try to follow controller command (form mySpeed ("+mySpeed+") to syncspeed ("+syncSpeed+")") 
      myController = controller 
      adjustSpeedTo(syncSpeed) 
     } 
     } 
    } 
    } 

    def adjustSpeedTo(targetSpeed: Int) = { 
    if(targetSpeed > mySpeed) { 
     mySpeed += 1 
     self ! SyncGear(myController, targetSpeed) 
    }else if(targetSpeed < mySpeed) { 
     mySpeed -= 1 
     self ! SyncGear(myController, targetSpeed) 
    } else if(targetSpeed == mySpeed) { 
     callController 
    } 
    } 

    def callController = { 
    println("[Gear ("+id+")] has syncSpeed") 
    myController ! ReceivedSpeed(this) 
    } 
} 
같은 출력 : 이것은 코드

[App] start with creating gears 
[Gear (0)] created with speed: 935 
[Gear (1)] created with speed: 398 
[Gear (2)] created with speed: 164 
[Gear (3)] created with speed: 64 
[Gear (4)] created with speed: 461 
[Gear (5)] created with speed: 741 
[Gear (6)] created with speed: 93 
[Gear (7)] created with speed: 850 
[Gear (8)] created with speed: 679 
[Gear (9)] created with speed: 587 
[Gear (10)] created with speed: 789 
[Gear (11)] created with speed: 849 
[Gear (12)] created with speed: 386 
[Gear (13)] created with speed: 981 
[Gear (14)] created with speed: 246 
[Gear (15)] created with speed: 661 
[Gear (16)] created with speed: 245 
[Gear (17)] created with speed: 655 
[Gear (18)] created with speed: 193 
[Gear (19)] created with speed: 240 
[Gear (20)] created with speed: 72 
[Gear (21)] created with speed: 884 
[Gear (22)] created with speed: 334 
[Gear (23)] created with speed: 169 
[Gear (24)] created with speed: 665 
[Gear (25)] created with speed: 773 
[Gear (26)] created with speed: 333 
[Gear (27)] created with speed: 524 
[Gear (28)] created with speed: 673 
[Gear (29)] created with speed: 189 
[Gear (30)] created with speed: 573 
[Gear (31)] created with speed: 762 
[Gear (32)] created with speed: 162 
[Gear (33)] created with speed: 735 
[Gear (34)] created with speed: 222 
[Gear (35)] created with speed: 854 
[Gear (36)] created with speed: 124 
[Gear (37)] created with speed: 650 
[Gear (38)] created with speed: 514 
[Gear (39)] created with speed: 0 
[Gear (40)] created with speed: 106 
[Gear (41)] created with speed: 117 
[Gear (42)] created with speed: 912 
[Gear (43)] created with speed: 782 
[Gear (44)] created with speed: 161 
[Gear (45)] created with speed: 748 
[Gear (46)] created with speed: 311 
[Gear (47)] created with speed: 168 
[Gear (48)] created with speed: 776 
[Gear (49)] created with speed: 424 
[Gear (50)] created with speed: 749 
[Gear (51)] created with speed: 819 
[Gear (52)] created with speed: 664 
[Gear (53)] created with speed: 996 
[Gear (54)] created with speed: 877 
[Gear (55)] created with speed: 808 
[Gear (56)] created with speed: 781 
[Gear (57)] created with speed: 464 
[Gear (58)] created with speed: 408 
[Gear (59)] created with speed: 337 
[Gear (60)] created with speed: 822 
[Gear (61)] created with speed: 812 
[Gear (62)] created with speed: 979 
[Gear (63)] created with speed: 290 
[Gear (64)] created with speed: 972 
[Gear (65)] created with speed: 20 
[Gear (66)] created with speed: 787 
[Gear (67)] created with speed: 680 
[Gear (68)] created with speed: 466 
[Gear (69)] created with speed: 554 
[Gear (70)] created with speed: 53 
[Gear (71)] created with speed: 212 
[Gear (72)] created with speed: 90 
[Gear (73)] created with speed: 535 
[Gear (74)] created with speed: 268 
[Gear (75)] created with speed: 893 
[Gear (76)] created with speed: 847 
[Gear (77)] created with speed: 671 
[Gear (78)] created with speed: 106 
[Gear (79)] created with speed: 779 
[Gear (80)] created with speed: 433 
[Gear (81)] created with speed: 757 
[Gear (82)] created with speed: 400 
[Gear (83)] created with speed: 88 
[Gear (84)] created with speed: 89 
[Gear (85)] created with speed: 348 
[Gear (86)] created with speed: 695 
[Gear (87)] created with speed: 618 
[Gear (88)] created with speed: 986 
[Gear (89)] created with speed: 624 
[Gear (90)] created with speed: 578 
[Gear (91)] created with speed: 613 
[Gear (92)] created with speed: 52 
[Gear (93)] created with speed: 9 
[Gear (94)] created with speed: 91 
[Gear (95)] created with speed: 790 
[Gear (96)] created with speed: 481 
[Gear (97)] created with speed: 443 
[Gear (98)] created with speed: 709 
[Gear (99)] created with speed: 772 
[Controller] Send commands for syncing to gears! 
[Controller] calculated syncSpeed: 512 
[Controller] started all gears 
[Gear (38)] has syncSpeed 
[Controller] Syncspeed received by a gear (38) 
[Gear (27)] has syncSpeed 
[Controller] Syncspeed received by a gear (27) 
[Gear (73)] has syncSpeed 
[Controller] Syncspeed received by a gear (73) 
[Gear (96)] has syncSpeed 
[Controller] Syncspeed received by a gear (96) 
[Gear (69)] has syncSpeed 
[Controller] Syncspeed received by a gear (69) 
[Gear (68)] has syncSpeed 
[Controller] Syncspeed received by a gear (68) 
[Gear (57)] has syncSpeed 
[Controller] Syncspeed received by a gear (57) 
[Gear (4)] has syncSpeed 
[Controller] Syncspeed received by a gear (4) 
[Gear (30)] has syncSpeed 
[Controller] Syncspeed received by a gear (30) 
[Gear (90)] has syncSpeed 
[Controller] Syncspeed received by a gear (90) 
[Gear (97)] has syncSpeed 
[Controller] Syncspeed received by a gear (97) 
[Gear (9)] has syncSpeed 
[Controller] Syncspeed received by a gear (9) 
[Gear (80)] has syncSpeed 
[Controller] Syncspeed received by a gear (80) 
[Gear (49)] has syncSpeed 
[Controller] Syncspeed received by a gear (49) 
[Gear (91)] has syncSpeed 
[Controller] Syncspeed received by a gear (91) 
[Gear (58)] has syncSpeed 
[Controller] Syncspeed received by a gear (58) 
[Gear (87)] has syncSpeed 
[Controller] Syncspeed received by a gear (87) 
[Gear (82)] has syncSpeed 
[Gear (89)] has syncSpeed 
[Controller] Syncspeed received by a gear (82) 
[Controller] Syncspeed received by a gear (89) 
[Gear (1)] has syncSpeed 
[Controller] Syncspeed received by a gear (1) 
[Gear (12)] has syncSpeed 
[Controller] Syncspeed received by a gear (12) 
[Gear (37)] has syncSpeed 
[Controller] Syncspeed received by a gear (37) 
[Gear (17)] has syncSpeed 
[Controller] Syncspeed received by a gear (17) 
[Gear (24)] has syncSpeed 
[Controller] Syncspeed received by a gear (24) 
[Gear (52)] has syncSpeed 
[Controller] Syncspeed received by a gear (52) 
[Gear (77)] has syncSpeed 
[Controller] Syncspeed received by a gear (77) 
[Gear (28)] has syncSpeed 
[Controller] Syncspeed received by a gear (28) 
[Gear (85)] has syncSpeed 
[Controller] Syncspeed received by a gear (85) 
[Gear (8)] has syncSpeed 
[Controller] Syncspeed received by a gear (8) 
[Gear (15)] has syncSpeed 
[Gear (67)] has syncSpeed 
[Controller] Syncspeed received by a gear (15) 
[Controller] Syncspeed received by a gear (67) 
[Gear (59)] has syncSpeed 
[Controller] Syncspeed received by a gear (59) 
[Gear (86)] has syncSpeed 
[Controller] Syncspeed received by a gear (86) 
[Gear (98)] has syncSpeed 
[Controller] Syncspeed received by a gear (98) 
[Gear (46)] has syncSpeed 
[Controller] Syncspeed received by a gear (46) 
[Gear (26)] has syncSpeed 
[Controller] Syncspeed received by a gear (26) 
[Gear (63)] has syncSpeed 
[Gear (22)] has syncSpeed 
[Controller] Syncspeed received by a gear (63) 
[Gear (5)] has syncSpeed 
[Controller] Syncspeed received by a gear (22) 
[Controller] Syncspeed received by a gear (5) 
[Gear (45)] has syncSpeed 
[Controller] Syncspeed received by a gear (45) 
[Gear (74)] has syncSpeed 
[Gear (50)] has syncSpeed 
[Controller] Syncspeed received by a gear (74) 
[Gear (81)] has syncSpeed 
[Controller] Syncspeed received by a gear (50) 
[Controller] Syncspeed received by a gear (81) 
[Gear (33)] has syncSpeed 
[Controller] Syncspeed received by a gear (33) 
[Gear (99)] has syncSpeed 
[Controller] Syncspeed received by a gear (99) 
[Gear (25)] has syncSpeed 
[Controller] Syncspeed received by a gear (25) 
[Gear (48)] has syncSpeed 
[Controller] Syncspeed received by a gear (48) 
[Gear (14)] has syncSpeed 
[Controller] Syncspeed received by a gear (14) 
[Gear (16)] has syncSpeed 
[Gear (79)] has syncSpeed 
[Controller] Syncspeed received by a gear (16) 
[Controller] Syncspeed received by a gear (79) 
[Gear (56)] has syncSpeed 
[Controller] Syncspeed received by a gear (56) 
[Gear (43)] has syncSpeed 
[Controller] Syncspeed received by a gear (43) 
[Gear (19)] has syncSpeed 
[Controller] Syncspeed received by a gear (19) 
[Gear (66)] has syncSpeed 
[Gear (10)] has syncSpeed 
[Controller] Syncspeed received by a gear (66) 
[Controller] Syncspeed received by a gear (10) 
[Gear (31)] has syncSpeed 
[Controller] Syncspeed received by a gear (31) 
[Gear (55)] has syncSpeed 
[Gear (95)] has syncSpeed 
[Controller] Syncspeed received by a gear (55) 
[Controller] Syncspeed received by a gear (95) 
[Gear (61)] has syncSpeed 
[Controller] Syncspeed received by a gear (61) 
[Gear (51)] has syncSpeed 
[Controller] Syncspeed received by a gear (51) 
[Gear (60)] has syncSpeed 
[Controller] Syncspeed received by a gear (60) 
[Gear (29)] has syncSpeed 
[Controller] Syncspeed received by a gear (29) 
[Gear (34)] has syncSpeed 
[Controller] Syncspeed received by a gear (34) 
[Gear (7)] has syncSpeed 
[Controller] Syncspeed received by a gear (7) 
[Gear (11)] has syncSpeed 
[Controller] Syncspeed received by a gear (11) 
[Gear (47)] has syncSpeed 
[Controller] Syncspeed received by a gear (47) 
[Gear (71)] has syncSpeed 
[Controller] Syncspeed received by a gear (71) 
[Gear (23)] has syncSpeed 
[Controller] Syncspeed received by a gear (23) 
[Gear (35)] has syncSpeed 
[Gear (2)] has syncSpeed 
[Controller] Syncspeed received by a gear (35) 
[Controller] Syncspeed received by a gear (2) 
[Gear (54)] has syncSpeed 
[Controller] Syncspeed received by a gear (54) 
[Gear (32)] has syncSpeed 
[Controller] Syncspeed received by a gear (32) 
[Gear (21)] has syncSpeed 
[Controller] Syncspeed received by a gear (21) 
[Gear (44)] has syncSpeed 
[Controller] Syncspeed received by a gear (44) 
[Gear (75)] has syncSpeed 
[Controller] Syncspeed received by a gear (75) 
[Gear (36)] has syncSpeed 
[Controller] Syncspeed received by a gear (36) 
[Gear (18)] has syncSpeed 
[Gear (76)] has syncSpeed 
[Controller] Syncspeed received by a gear (76) 
[Controller] Syncspeed received by a gear (18) 
[Gear (41)] has syncSpeed 
[Controller] Syncspeed received by a gear (41) 
[Gear (78)] has syncSpeed 
[Gear (40)] has syncSpeed 
[Controller] Syncspeed received by a gear (78) 
[Controller] Syncspeed received by a gear (40) 
[Gear (42)] has syncSpeed 
[Gear (6)] has syncSpeed 
[Controller] Syncspeed received by a gear (42) 
[Controller] Syncspeed received by a gear (6) 
[Gear (94)] has syncSpeed 
[Controller] Syncspeed received by a gear (94) 
[Gear (0)] has syncSpeed 
[Gear (84)] has syncSpeed 
[Controller] Syncspeed received by a gear (0) 
[Gear (83)] has syncSpeed 
[Controller] Syncspeed received by a gear (83) 
[Gear (72)] has syncSpeed 
[Controller] Syncspeed received by a gear (72) 
[Gear (20)] has syncSpeed 
[Controller] Syncspeed received by a gear (20) 
[Gear (92)] has syncSpeed 
[Controller] Syncspeed received by a gear (84) 
[Controller] Syncspeed received by a gear (92) 
[Gear (13)] has syncSpeed 
[Gear (3)] has syncSpeed 
[Controller] Syncspeed received by a gear (13) 
[Controller] Syncspeed received by a gear (3) 
[Gear (70)] has syncSpeed 
[Controller] Syncspeed received by a gear (70) 
[Gear (88)] has syncSpeed 
[Controller] Syncspeed received by a gear (88) 
[Gear (53)] has syncSpeed 
[Gear (64)] has syncSpeed 
[Gear (62)] has syncSpeed 
[Gear (93)] has syncSpeed 
[Gear (39)] has syncSpeed 
[Gear (65)] has syncSpeed 
[Controller] Syncspeed received by a gear (53) 
[Controller] Syncspeed received by a gear (64) 
[Controller] Syncspeed received by a gear (62) 
[Controller] Syncspeed received by a gear (93) 
[Controller] Syncspeed received by a gear (39) 
[Controller] Syncspeed received by a gear (65) 
[Controller] all gears are back in town! 

당신은 가 다른 배우 출력 교번 볼 수있다 (기어 컨트롤러) . 그러나 스칼라 2.8으로 변경하면 다음과 같은 출력이 나옵니다.

[App] start with creating gears 
[Gear (0)] created with speed: 995 
[Gear (1)] created with speed: 40 
[Gear (2)] created with speed: 483 
[Gear (3)] created with speed: 920 
[Gear (4)] created with speed: 339 
[Gear (5)] created with speed: 422 
[Gear (6)] created with speed: 258 
[Gear (7)] created with speed: 603 
[Gear (8)] created with speed: 40 
[Gear (9)] created with speed: 399 
[Gear (10)] created with speed: 347 
[Gear (11)] created with speed: 339 
[Gear (12)] created with speed: 559 
[Gear (13)] created with speed: 697 
[Gear (14)] created with speed: 18 
[Gear (15)] created with speed: 568 
[Gear (16)] created with speed: 271 
[Gear (17)] created with speed: 239 
[Gear (18)] created with speed: 889 
[Gear (19)] created with speed: 933 
[Gear (20)] created with speed: 793 
[Gear (21)] created with speed: 494 
[Gear (22)] created with speed: 683 
[Gear (23)] created with speed: 41 
[Gear (24)] created with speed: 738 
[Gear (25)] created with speed: 291 
[Gear (26)] created with speed: 833 
[Gear (27)] created with speed: 610 
[Gear (28)] created with speed: 514 
[Gear (29)] created with speed: 793 
[Gear (30)] created with speed: 917 
[Gear (31)] created with speed: 838 
[Gear (32)] created with speed: 801 
[Gear (33)] created with speed: 153 
[Gear (34)] created with speed: 19 
[Gear (35)] created with speed: 549 
[Gear (36)] created with speed: 524 
[Gear (37)] created with speed: 912 
[Gear (38)] created with speed: 517 
[Gear (39)] created with speed: 586 
[Gear (40)] created with speed: 662 
[Gear (41)] created with speed: 143 
[Gear (42)] created with speed: 147 
[Gear (43)] created with speed: 445 
[Gear (44)] created with speed: 1 
[Gear (45)] created with speed: 366 
[Gear (46)] created with speed: 397 
[Gear (47)] created with speed: 523 
[Gear (48)] created with speed: 920 
[Gear (49)] created with speed: 91 
[Gear (50)] created with speed: 316 
[Gear (51)] created with speed: 573 
[Gear (52)] created with speed: 956 
[Gear (53)] created with speed: 615 
[Gear (54)] created with speed: 636 
[Gear (55)] created with speed: 385 
[Gear (56)] created with speed: 422 
[Gear (57)] created with speed: 574 
[Gear (58)] created with speed: 882 
[Gear (59)] created with speed: 274 
[Gear (60)] created with speed: 371 
[Gear (61)] created with speed: 971 
[Gear (62)] created with speed: 999 
[Gear (63)] created with speed: 990 
[Gear (64)] created with speed: 367 
[Gear (65)] created with speed: 646 
[Gear (66)] created with speed: 957 
[Gear (67)] created with speed: 187 
[Gear (68)] created with speed: 432 
[Gear (69)] created with speed: 472 
[Gear (70)] created with speed: 899 
[Gear (71)] created with speed: 325 
[Gear (72)] created with speed: 615 
[Gear (73)] created with speed: 315 
[Gear (74)] created with speed: 425 
[Gear (75)] created with speed: 441 
[Gear (76)] created with speed: 679 
[Gear (77)] created with speed: 125 
[Gear (78)] created with speed: 706 
[Gear (79)] created with speed: 455 
[Gear (80)] created with speed: 15 
[Gear (81)] created with speed: 155 
[Gear (82)] created with speed: 669 
[Gear (83)] created with speed: 590 
[Gear (84)] created with speed: 457 
[Gear (85)] created with speed: 574 
[Gear (86)] created with speed: 1 
[Gear (87)] created with speed: 472 
[Gear (88)] created with speed: 763 
[Gear (89)] created with speed: 329 
[Gear (90)] created with speed: 385 
[Gear (91)] created with speed: 176 
[Gear (92)] created with speed: 674 
[Gear (93)] created with speed: 528 
[Gear (94)] created with speed: 702 
[Gear (95)] created with speed: 328 
[Gear (96)] created with speed: 82 
[Gear (97)] created with speed: 833 
[Gear (98)] created with speed: 101 
[Gear (99)] created with speed: 950 
[Controller] Send commands for syncing to gears! 
[Controller] calculated syncSpeed: 504 
[Controller] started all gears 
[Gear (2)] has syncSpeed 
[Gear (0)] has syncSpeed 
[Gear (5)] has syncSpeed 
[Gear (1)] has syncSpeed 
[Gear (4)] has syncSpeed 
[Gear (8)] has syncSpeed 
[Gear (9)] has syncSpeed 
[Gear (7)] has syncSpeed 
[Gear (10)] has syncSpeed 
[Gear (11)] has syncSpeed 
[Gear (12)] has syncSpeed 
[Gear (13)] has syncSpeed 
[Gear (15)] has syncSpeed 
[Gear (14)] has syncSpeed 
[Gear (3)] has syncSpeed 
[Gear (16)] has syncSpeed 
[Gear (17)] has syncSpeed 
[Gear (18)] has syncSpeed 
[Gear (21)] has syncSpeed 
[Gear (6)] has syncSpeed 
[Gear (22)] has syncSpeed 
[Gear (24)] has syncSpeed 
[Gear (23)] has syncSpeed 
[Gear (25)] has syncSpeed 
[Gear (20)] has syncSpeed 
[Gear (28)] has syncSpeed 
[Gear (29)] has syncSpeed 
[Gear (26)] has syncSpeed 
[Gear (19)] has syncSpeed 
[Gear (32)] has syncSpeed 
[Gear (31)] has syncSpeed 
[Gear (33)] has syncSpeed 
[Gear (35)] has syncSpeed 
[Gear (36)] has syncSpeed 
[Gear (30)] has syncSpeed 
[Gear (38)] has syncSpeed 
[Gear (39)] has syncSpeed 
[Gear (34)] has syncSpeed 
[Gear (40)] has syncSpeed 
[Gear (41)] has syncSpeed 
[Gear (42)] has syncSpeed 
[Gear (27)] has syncSpeed 
[Gear (45)] has syncSpeed 
[Gear (46)] has syncSpeed 
[Gear (47)] has syncSpeed 
[Gear (44)] has syncSpeed 
[Gear (43)] has syncSpeed 
[Gear (48)] has syncSpeed 
[Gear (50)] has syncSpeed 
[Gear (51)] has syncSpeed 
[Gear (49)] has syncSpeed 
[Gear (53)] has syncSpeed 
[Gear (37)] has syncSpeed 
[Gear (54)] has syncSpeed 
[Gear (56)] has syncSpeed 
[Gear (57)] has syncSpeed 
[Gear (59)] has syncSpeed 
[Gear (58)] has syncSpeed 
[Gear (60)] has syncSpeed 
[Gear (55)] has syncSpeed 
[Gear (52)] has syncSpeed 
[Gear (62)] has syncSpeed 
[Gear (63)] has syncSpeed 
[Gear (64)] has syncSpeed 
[Gear (65)] has syncSpeed 
[Gear (67)] has syncSpeed 
[Gear (68)] has syncSpeed 
[Gear (69)] has syncSpeed 
[Gear (61)] has syncSpeed 
[Gear (70)] has syncSpeed 
[Gear (72)] has syncSpeed 
[Gear (66)] has syncSpeed 
[Gear (74)] has syncSpeed 
[Gear (73)] has syncSpeed 
[Gear (75)] has syncSpeed 
[Gear (76)] has syncSpeed 
[Gear (79)] has syncSpeed 
[Gear (71)] has syncSpeed 
[Gear (78)] has syncSpeed 
[Gear (77)] has syncSpeed 
[Gear (82)] has syncSpeed 
[Gear (80)] has syncSpeed 
[Gear (84)] has syncSpeed 
[Gear (83)] has syncSpeed 
[Gear (85)] has syncSpeed 
[Gear (87)] has syncSpeed 
[Gear (88)] has syncSpeed 
[Gear (81)] has syncSpeed 
[Gear (86)] has syncSpeed 
[Gear (89)] has syncSpeed 
[Gear (90)] has syncSpeed 
[Gear (93)] has syncSpeed 
[Gear (94)] has syncSpeed 
[Gear (91)] has syncSpeed 
[Gear (95)] has syncSpeed 
[Gear (96)] has syncSpeed 
[Gear (92)] has syncSpeed 
[Gear (97)] has syncSpeed 
[Controller] Syncspeed received by a gear (2) 
[Controller] Syncspeed received by a gear (0) 
[Controller] Syncspeed received by a gear (5) 
[Controller] Syncspeed received by a gear (1) 
[Controller] Syncspeed received by a gear (4) 
[Controller] Syncspeed received by a gear (8) 
[Controller] Syncspeed received by a gear (9) 
[Controller] Syncspeed received by a gear (7) 
[Controller] Syncspeed received by a gear (10) 
[Controller] Syncspeed received by a gear (11) 
[Controller] Syncspeed received by a gear (12) 
[Controller] Syncspeed received by a gear (13) 
[Controller] Syncspeed received by a gear (15) 
[Controller] Syncspeed received by a gear (14) 
[Controller] Syncspeed received by a gear (3) 
[Controller] Syncspeed received by a gear (16) 
[Controller] Syncspeed received by a gear (17) 
[Controller] Syncspeed received by a gear (18) 
[Controller] Syncspeed received by a gear (21) 
[Controller] Syncspeed received by a gear (6) 
[Controller] Syncspeed received by a gear (22) 
[Controller] Syncspeed received by a gear (24) 
[Controller] Syncspeed received by a gear (23) 
[Controller] Syncspeed received by a gear (25) 
[Controller] Syncspeed received by a gear (20) 
[Controller] Syncspeed received by a gear (28) 
[Controller] Syncspeed received by a gear (29) 
[Controller] Syncspeed received by a gear (26) 
[Controller] Syncspeed received by a gear (19) 
[Controller] Syncspeed received by a gear (32) 
[Controller] Syncspeed received by a gear (31) 
[Controller] Syncspeed received by a gear (33) 
[Controller] Syncspeed received by a gear (35) 
[Controller] Syncspeed received by a gear (36) 
[Controller] Syncspeed received by a gear (30) 
[Controller] Syncspeed received by a gear (38) 
[Controller] Syncspeed received by a gear (39) 
[Controller] Syncspeed received by a gear (34) 
[Controller] Syncspeed received by a gear (40) 
[Controller] Syncspeed received by a gear (41) 
[Controller] Syncspeed received by a gear (42) 
[Controller] Syncspeed received by a gear (27) 
[Gear (98)] has syncSpeed 
[Gear (99)] has syncSpeed 
[Controller] Syncspeed received by a gear (45) 
[Controller] Syncspeed received by a gear (46) 
[Controller] Syncspeed received by a gear (47) 
[Controller] Syncspeed received by a gear (44) 
[Controller] Syncspeed received by a gear (43) 
[Controller] Syncspeed received by a gear (48) 
[Controller] Syncspeed received by a gear (50) 
[Controller] Syncspeed received by a gear (51) 
[Controller] Syncspeed received by a gear (49) 
[Controller] Syncspeed received by a gear (53) 
[Controller] Syncspeed received by a gear (37) 
[Controller] Syncspeed received by a gear (54) 
[Controller] Syncspeed received by a gear (56) 
[Controller] Syncspeed received by a gear (57) 
[Controller] Syncspeed received by a gear (59) 
[Controller] Syncspeed received by a gear (58) 
[Controller] Syncspeed received by a gear (60) 
[Controller] Syncspeed received by a gear (55) 
[Controller] Syncspeed received by a gear (52) 
[Controller] Syncspeed received by a gear (62) 
[Controller] Syncspeed received by a gear (63) 
[Controller] Syncspeed received by a gear (64) 
[Controller] Syncspeed received by a gear (65) 
[Controller] Syncspeed received by a gear (67) 
[Controller] Syncspeed received by a gear (68) 
[Controller] Syncspeed received by a gear (69) 
[Controller] Syncspeed received by a gear (61) 
[Controller] Syncspeed received by a gear (70) 
[Controller] Syncspeed received by a gear (72) 
[Controller] Syncspeed received by a gear (66) 
[Controller] Syncspeed received by a gear (74) 
[Controller] Syncspeed received by a gear (73) 
[Controller] Syncspeed received by a gear (75) 
[Controller] Syncspeed received by a gear (76) 
[Controller] Syncspeed received by a gear (79) 
[Controller] Syncspeed received by a gear (71) 
[Controller] Syncspeed received by a gear (78) 
[Controller] Syncspeed received by a gear (77) 
[Controller] Syncspeed received by a gear (82) 
[Controller] Syncspeed received by a gear (80) 
[Controller] Syncspeed received by a gear (84) 
[Controller] Syncspeed received by a gear (83) 
[Controller] Syncspeed received by a gear (85) 
[Controller] Syncspeed received by a gear (87) 
[Controller] Syncspeed received by a gear (88) 
[Controller] Syncspeed received by a gear (81) 
[Controller] Syncspeed received by a gear (86) 
[Controller] Syncspeed received by a gear (89) 
[Controller] Syncspeed received by a gear (90) 
[Controller] Syncspeed received by a gear (93) 
[Controller] Syncspeed received by a gear (94) 
[Controller] Syncspeed received by a gear (91) 
[Controller] Syncspeed received by a gear (95) 
[Controller] Syncspeed received by a gear (96) 
[Controller] Syncspeed received by a gear (92) 
[Controller] Syncspeed received by a gear (97) 
[Controller] Syncspeed received by a gear (98) 
[Controller] Syncspeed received by a gear (99) 
[Controller] all gears are back in town! 

액터 상호 작용이 훨씬 적게 발생한다는 것을 알 수 있습니다. 기어가 작동하는 동안 컨트롤러가 차단 된 것 같습니다. 누군가이 행동을 설명 할 수 있을까요? 감사합니다 Philipp

답변

3

코드에 몇 가지 문제점이 있습니다. 이들 중 중요한 것은,이 작업을 수행하지 않습니다 당신이 extends Application 사용하는 경우

object ActorApplication extends Application 

, 당신의 코드가 실행되는 방법은 제한의 숫자를 부과, 같은 사건에 JIT에 의해 최적화 할, 특히 관련이없는 것처럼 스레드가 올바르게 작동하지 않습니다. 나는 2.7에서 일어난 일을 2.8에서 일어난 일보다 설명하기가 더 힘들다. 대신, 그냥 정상적인 개체를 작성하고 main 메서드를 정의하십시오.

다른 물건 :

gearController ! StartSync() 

이 작업을 수행하지 마십시오. 액터 내부에서 항상 액터에게 메시지를 보내십시오.이 행은 액터가 아닌 ActorApplication 생성자 안에 있습니다. 이 같은 상황에서, 당신은이 작업을 수행 할 수 있습니다

Actor.actor { gearController ! StartSync() } 

StartSync의 말하기,이 작업을 수행하지 않습니다 매개 변수없이

case class StartSync 

클래스는 의미 (그리고 사용되지 않음)입니다.

case object StartSync 

을 당신이 그것을 사용하는 장소에서 StartSync 후 괄호를 삭제 대신,이 작업을 수행.

또한, scala.util.Random 아무 문제가 없다 새로운 Random 발전기 당신이 임의의 숫자를 (필요한 모든 시간을 만들어, 스칼라 2.8에보다 당신이에 무엇 인 스칼라 2.7에 오용 쉽게 이었지만 암호). 대신 스칼라 2.8에, 그냥이 작동한다고 :

private var mySpeed = scala.util.Random.nextInt(1000) 

마지막으로, 하나 실행에 아무 문제가 없다, 그것은 그들 사이에 다른 그냥 스케줄러입니다.실제로, 당신이 100 명의 액터를 만들었다면, GearController은 스칼라 2.7 버전에서 실행 시간이 불균형 적이었습니다. 스칼라는 모든 액터에 스레드를 생성하지 않기 때문입니다. 당신이 다른 사람과 스레드를 공유하지 GearController를 원하는 경우

이제,이 같은 while(true)/receive 대신 loop/react를 사용한다 : 아주 유사한 결과를 생성합니다

while(true) { 
     receive { 
     case StartSync => { 

무엇 2.7 생산.

+1

Daniel에게 도움이되는 답변을 해주셔서 감사합니다. 필자는 변경 작업을 수행했으며 Scala 2.8에서 코드가 잘 실행됩니다. 이 시뮬레이션을위한 간단한 스칼라 스윙 GUI를 만들어 github에 게시 할 것입니다. – meip