복붙노트

[SCALA] 스칼라 글로벌 대 Play의 실행 컨텍스트

SCALA

스칼라 글로벌 대 Play의 실행 컨텍스트

어떻게에서 실행 컨텍스트를 않습니다

import scala.concurrent.ExecutionContext.Implicits.global

Play의 실행 상황과 다를 :

import play.core.Execution.Implicits.{internalContext, defaultContext}

해결법

  1. ==============================

    1.그들은 매우 다릅니다.

    그들은 매우 다릅니다.

    플레이 인 2.3.x 이전에 play.core.Execution.Implicits.internalContext는 재생 내부적으로 사용 크기에 대한 고정 제약이있는 ForkJoinPool입니다. 당신은 당신의 응용 프로그램 코드를 사용해서는 안됩니다. 워드 프로세서 :

    대신, 당신은 ActorSystem를 사용 play.api.libs.concurrent.Execution.Implicits.defaultContext을 사용합니다.

    2.4.x에서, 그들은 모두 동일한 ActorSystem를 사용합니다. Akka 스레드의 자신의 풀 사이에 작업을 분배하지만, 보이지 않는 (구성 제외)하는 방법 것이 의미합니다. 여러 Akka 배우가 동일한 스레드를 공유 할 수 있습니다.

    scala.concurrent.ExecutionContext.Implicits.global는 스칼라 표준 라이브러리에 정의 된 ExecutionContext에 있습니다. 차단 방법을 사용하면 풀에 새로운 스레드를 생성하기 위해 코드를 차단 잠재적으로 처리 할 수있는 특별한 ForkJoinPool이다. 재생이 통제 할 수없는 것 같이, 진짜로 재생 응용 프로그램에서이를 사용하지 않아야합니다. 또한 스레드를 많이 산란하고 조심하지 않으면, 메모리의 톤을 사용할 수있는 가능성이있다.

    나는이 대답 scala.concurrent.ExecutionContext.Implicits.global에 대한 자세한 내용을 서면으로 작성했습니다.

  2. ==============================

    2.그들은 동일하며에서 기본 배우 체제의 기본 디스패처를 지적하여 Akka 또는 결합 된 응용 프로그램 또는를 재생합니다.

    그들은 동일하며에서 기본 배우 체제의 기본 디스패처를 지적하여 Akka 또는 결합 된 응용 프로그램 또는를 재생합니다.

    play.api.libs.concurrent.Execution.Implicits.defaultContext
    
    play.core.Execution.Implicits.internalContext
    
    class ClassA @Inject()(config: Configuration)
                               (implicit ec: ExecutionContext) {
    ...
    }
    

    하지만이 다르다 :

    scala.concurrent.ExecutionContext.Implicits.global
    

    또한 DB 드라이버, 예를 들어, 당신이 매끄러운을 사용하는 경우, 자신의 실행 컨텍스트와 함께 올 수 있습니다. 어쨌든,

  3. from https://stackoverflow.com/questions/30805337/plays-execution-contexts-vs-scala-global by cc-by-sa and MIT license