Что происходит, когда Scala “будущее” собран "мусор"?

Скажите, что у меня есть a Stream это довольно дорого для вычислений. Я могу легко создать поток, который "вычисляет вперед" только путем записи чего-то как

import scala.actors.Futures._
val s = future { stream.size }

Если я затем выбрасываю ссылку на это Future, это распараллелит быть уничтоженным сборщиком "мусора"?

14
задан Nathan Kleyn 8 November 2011 в 04:24
поделиться

1 ответ

Нет. Поток принадлежит планировщику. В любом случае планировщик имеет ссылку на незавершенное тело Future (это происходит в a.start () ), поэтому он не будет собираться мусором до завершения.

object Futures {

  /** Arranges for the asynchronous execution of `body`,
   *  returning a future representing the result.
   *
   *  @param  body the computation to be carried out asynchronously
   *  @return      the future representing the result of the
   *               computation
   */
  def future[T](body: => T): Future[T] = {
    val c = new Channel[T](Actor.self(DaemonScheduler))
    val a = new FutureActor[T](_.set(body), c)
    a.start()
    a
  }
}
15
ответ дан 1 December 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: