期货在斯卡拉阻塞调用(Futures for blocking calls in Scala)

2019-08-21 21:53发布

Akka文档说:

你可能想只是包装一个未来几年内的阻塞调用,并与替代工作,但这个策略是太简单了:你很可能会发现瓶颈或用完内存或线程应用程序时增加的负荷下运行。

他们提出了以下策略:

  • 做一个内阻塞调用Future ,确保对此类电话的数量上限在任何时间点(提交此方面的任务的无限数量的会用尽你的记忆或线程限制)。

  • 做阻塞调用一个内Future ,提供了一个线程池的线程数的上限是适合硬件上运行应用程序。

你知道这些战略的执行任何?

Answer 1:

期货中运行执行上下文 。 这是明显的Future API:这涉及到一些回调连接到一个未来或从任意计算或从另一个未来建立一个未来的任何呼叫需要一个隐含可用ExecutionContext对象。 所以,你可以通过调整控制你的期货并发设置ExecutionContext它们运行。

例如,为了实现你可以这样做的第二个策略

import scala.concurrent.ExecutionContext
import java.util.concurrent.Executors
import scala.concurrent.future

object Main extends App {

  val ThreadCount = 10
  implicit val executionContext = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(ThreadCount))

  val f = future {
    println(s"Hello ! I'm running in an execution context with $ThreadCount threads")
  }

}


Answer 2:

阿卡本身实现这一切,你可以用你的阻塞调用到演员,然后用调度控制执行的线程池。



文章来源: Futures for blocking calls in Scala