2014-09-10 3 views
3

스칼라가 다른 CPU (코어)에서 미래를 즉시 실행할시기와 현재 코어가 비어있게 대기열을 대기시킬시기를 어떻게 결정합니까? 또는 완전히 다른 방법을 사용하는 경우 설명하십시오 : Scala Futures는 어떻게 계획되어 있습니까? (CPU 간, 스레드 간, 시간 경과에 따라)스칼라의 미래는 멀티 코어에서 어떻게 스케줄링 될까요?

+0

@ajozwik 당신은 질문을 잘못 해석했습니다. 여러 콜백 (onComplete)이있는 경우 본문을 실행 한 스레드는 다음 콜백을 실행하거나 다른 스레드에 대한 콜백을 예약 할 수 있습니다 (동일한 명백한 실행 컨텍스트에서). 질문은 다음 콜백을 실행하거나 일정을 계획해야하는 경우 어떤 기준에 따라 결정됩니다. – Jatin

+0

@Jatin OP가 명확해질 수는 있지만 그렇게 읽지는 않습니다. 삭제 된 답변 (및 설명)이 적절하다고 생각합니다. –

답변

1

미래가 사용하는 ExecutionContext를 기반으로합니다. 미래가 작업을 실행하거나 콜백을 호출 할 때 컨텍스트를 사용하여 정책을 결정합니다.

일반적인 스칼라 앱에서는 이러한 것들이 implicits로 전달되므로 항상 표시되지는 않습니다. 전의. in Play

import scala.concurrent.ExecutionContext.Implicits.global 

실제로는 Akka의 기본 컨텍스트를 가져 오는 데 자주 사용됩니다. 스레딩 정책이 무엇 단순히

Future {do something}(ctx) 

그래서 귀하의 질문에 대답하는

val ctx = ExecutionContext.fromExecutor(
    Executors.newFixedThreadPool(5)) 

을 그리고 다음과 같이 사용 (또는 암시 적) :

이 같은 자신의 스레드 풀을 지정할 수 있습니다 그것을 말하십시오 (종종 암시 적으로 당신에게 제공됩니다)

관련 문제