너무 많은 메모리를 할당하면 Scala Future가 아무것도 반환하지 않습니다.

StackOverflow https://stackoverflow.com//questions/23057445

  •  26-12-2019
  •  | 
  •  

문제

Scala-IDE 3.0.3(Scala 2.10.4 기반)을 사용하면 다음 코드는 계산된 값의 처음 10개 값을 표시하여 올바르게 완료됩니다. List 미래뿐만 아니라 미래에서도 Future completed메시지:

import scala.concurrent._
import scala.concurrent.duration._
import scala.util.{Failure, Success}
import ExecutionContext.Implicits.global

object FutureNonBlocking extends App {

    val f1: Future[List[Int]] = future {
        val t = List.range(1, 50).filter(_ % 2 == 0)
        println("Done")
        t
    }

    f1.onComplete {
        case Success(value) => println(value.take(10))
        case Failure(e) => println("Something bad happened")
    }

    Await.complete(f1, 30 seconds)
}

그러나 범위를 변경하면 List.range(1, 50) 에게 List.range(1, 5000) 아무 것도 표시되지 않으며 ( Failure 트리거되지 않습니다).논리적으로는 메모리 문제와 관련된 것 같지만 거기에서 무슨 일이 일어나고 있는지 이해할 수 없습니다.

낯선 사람이라도 REPL에서 이 코드를 실행하면 문제가 발생하지 않습니다.내가 거기에서 무엇을 놓치고 있습니까?

도움이 되었습니까?

해결책

모든 것이 메모리 관리 문제가 아닌 것으로 밝혀졌습니다. Futures 그러나 이는 Eclipse가 동시 프로그램에 대한 콘솔 출력을 처리하는 방식과 관련이 있습니다.

첨가 Thread.sleep(1000) 프로그램이 끝나면 Eclipse에서 모든 콘솔 출력을 표시하여 문제를 해결합니다.

매우 유용한 의견을 주신 @jilen에게 진심으로 감사드립니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top