2011-11-07 3 views
3

내가 아는 한, 스칼라는 액터를 실행하고 스레드를 공유하기 위해 스레드 풀을 관리합니다. 특정 액터를 독점적으로 별도의 스레드에서 실행하도록 설정하고, 다른 액터와 절대 공유하지 않을 수 있습니까?별도의 스레드를 독점적으로 사용하여 실행하도록 스칼라 액터를 설정하는 방법은 무엇입니까?

+0

왜 이것을 원하니? –

+0

@ pablo-fernandez는'java.lang.Thread.sleep (long millis)'를 안전하게 사용하고, 같은 스레드를 공유 할 수있는 다른 액터를 동결시키지 않는다. 실제 작업은 틱 메시지를 보내는 것 사이에 잠든 타이머 액터를 만드는 것입니다. – Ivan

+1

관련 스레드의 세부 제어가 필요한 경우 Executor 프레임 워크를 사용합니다. –

답변

2

스칼라 (아카가 아님) 배우를 사용하는 것처럼 들립니다. 이 경우 receive 또는 receiveWithin 메시지 처리 스타일을 사용하면 각 액터에 자체 스레드가 생깁니다. react 메시지 처리 스타일을 사용하면 액터간에 스레드 풀을 공유합니다. 나는 receive "스타일"을 말할 때

, 내가 예를 들어, 루프에서 의미 :이 경우 timerActor에서

val timerActor = actor { 
    while (true) { 
    receiveWithin(60 * 1000) { 
     case Stop => self.exit() 
     case TIMEOUT => 
      destination ! Tick 
    } 
    } 
} 

다른 배우와의 스레드를 공유하지 않습니다. receiveWithin은 액터가 Stop 메시지를 수신하거나 60 초가 경과 할 때까지 차단됩니다. 60 초가 경과하면 TIMEOUT 경우가 실행됩니다.

스칼라 배우에 대한 자세한 내용은 Actors That Unify Threads and Events을 확인하십시오.

Akka는 이벤트 기반 액터 외에 스레드 기반 액터도 지원합니다.

관련 문제