2014-01-27 2 views
8

병렬 수집 작업을 스칼라에 잘 적용하려면 시스템에서 효율적인 스케줄링과 관련하여 Akka Actors (및 Futures)에서 사용하는 동시성/병렬성이 필요합니까?Akka로 병렬 컬렉션 믹싱

Actors 'and Futures'실행은 Dispatcher에 의해 일반적으로 제공되는 ExecutionContext에 의해 처리됩니다. 병렬 컬렉션에서 찾은 것은 TaskSupport 개체를 사용하고 있음을 나타냅니다. 나는 ExecutionContextTaskSupport 두 개체를 연결할 수 있지만 확실하지 않은 개체를 발견했습니다.

두 개의 동시성 솔루션을 혼합하는 올바른 방법은 무엇입니까? 그렇지 않으면 어떻게해야합니까?

답변

3

현재이 기능은 지원/잘 처리되지 않습니다.

Scala 2.11-M7 이전에는 Dispatcher를 ContextExecutor로 사용하려고 시도하면 예외가 발생합니다. 이다

, 다음 코드 배우의 NotImplementedError 발생합니다 나타납니다이 위의 문제를 해결하기 위해 수행되지 않았다하더라도,

val par = List(1,2,3).par 
par.tasksupport = new ExecutionContextTaskSupport(context.dispatcher) 

par foreach println 

이 덧붙여이 2.11-M7에서 수정되었습니다.
위의 경우에 ExecutionContextTaskSupport에 의해 제공된 구현이 다른 TaskSupport 구현 중 하나를 직접 사용하여 약간의 오버 헤드를 가질 수있는 것처럼 보이는 픽스의 메모를 읽는 중입니다. 그러나, 나는 그 해석을 시험하거나 충격의 크기를 평가할 아무 것도하지 않았다. 병렬 컬렉션에


참고 사항 :
기본적으로 병렬 컬렉션은 당신이 선물을 위해 사용할 수있는 것처럼 글로벌 ExecutorContext (ExecutionContext.Implicits.global)를 사용합니다. 위의 코드 샘플과 같이 TaskSupport을 설정해야합니다.이 작업은 잘 수행되지만 Dispatcher (context.dispatcher 사용)의 제약을 받고 싶다면 Akka의 Futures와 관련이 있습니다.