Скажите, что у меня есть a Stream
это довольно дорого для вычислений. Я могу легко создать поток, который "вычисляет вперед" только путем записи чего-то как
import scala.actors.Futures._
val s = future { stream.size }
Если я затем выбрасываю ссылку на это Future
, это распараллелит быть уничтоженным сборщиком "мусора"?
Нет. Поток принадлежит планировщику. В любом случае планировщик имеет ссылку на незавершенное тело 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
}
}