3
스칼라가 다른 CPU (코어)에서 미래를 즉시 실행할시기와 현재 코어가 비어있게 대기열을 대기시킬시기를 어떻게 결정합니까? 또는 완전히 다른 방법을 사용하는 경우 설명하십시오 : Scala Futures는 어떻게 계획되어 있습니까? (CPU 간, 스레드 간, 시간 경과에 따라)스칼라의 미래는 멀티 코어에서 어떻게 스케줄링 될까요?
스칼라가 다른 CPU (코어)에서 미래를 즉시 실행할시기와 현재 코어가 비어있게 대기열을 대기시킬시기를 어떻게 결정합니까? 또는 완전히 다른 방법을 사용하는 경우 설명하십시오 : Scala Futures는 어떻게 계획되어 있습니까? (CPU 간, 스레드 간, 시간 경과에 따라)스칼라의 미래는 멀티 코어에서 어떻게 스케줄링 될까요?
미래가 사용하는 ExecutionContext를 기반으로합니다. 미래가 작업을 실행하거나 콜백을 호출 할 때 컨텍스트를 사용하여 정책을 결정합니다.
일반적인 스칼라 앱에서는 이러한 것들이 implicits로 전달되므로 항상 표시되지는 않습니다. 전의. in Play
import scala.concurrent.ExecutionContext.Implicits.global
실제로는 Akka의 기본 컨텍스트를 가져 오는 데 자주 사용됩니다. 스레딩 정책이 무엇 단순히
Future {do something}(ctx)
그래서 귀하의 질문에 대답하는
val ctx = ExecutionContext.fromExecutor(
Executors.newFixedThreadPool(5))
을 그리고 다음과 같이 사용 (또는 암시 적) :
이 같은 자신의 스레드 풀을 지정할 수 있습니다 그것을 말하십시오 (종종 암시 적으로 당신에게 제공됩니다)
@ajozwik 당신은 질문을 잘못 해석했습니다. 여러 콜백 (onComplete)이있는 경우 본문을 실행 한 스레드는 다음 콜백을 실행하거나 다른 스레드에 대한 콜백을 예약 할 수 있습니다 (동일한 명백한 실행 컨텍스트에서). 질문은 다음 콜백을 실행하거나 일정을 계획해야하는 경우 어떤 기준에 따라 결정됩니다. – Jatin
@Jatin OP가 명확해질 수는 있지만 그렇게 읽지는 않습니다. 삭제 된 답변 (및 설명)이 적절하다고 생각합니다. –