假设我有一个服务器Scala
,它处理传入的客户端请求。我有def process(req: Request): Response
处理请求的功能。现在我想只K
同时处理请求并将M
请求保留在队列中。
在Java
我可能会创建一个ThreadPoolExecutor
带有K
线程和一个大小的队列M
。Scala
现在我想知道如何使用Actors/Futures
等来做到这一点。
假设我有一个服务器Scala
,它处理传入的客户端请求。我有def process(req: Request): Response
处理请求的功能。现在我想只K
同时处理请求并将M
请求保留在队列中。
在Java
我可能会创建一个ThreadPoolExecutor
带有K
线程和一个大小的队列M
。Scala
现在我想知道如何使用Actors/Futures
等来做到这一点。
如果你必须有def process(req: Request): Response)
,那么我认为你的 Scala 解决方案可能会类似于 Java。如果你能拥有def process(req: Request): Future[Response]
,它会开启其他可能性。
使用期货时,您(隐式或显式)提供一个可以从 Java 执行器构造的执行上下文。因此,您可以通过这种方式选择线程池大小和队列大小。使用期货的好处是您可以使用map
andflatMap
和其他一些组合器来组合它们。有关更多信息,请参阅http://docs.scala-lang.org/overviews/core/futures.html。
使用演员,您有另一种并发模型,您可以在其中创建K
演员。您可以拥有一个将每个请求分派给参与者的路由器。每个参与者都独立处理请求,并Response
在处理完成后将请求发送到任何需要它的地方。Actor 的好处在于,每个独立的 Actor 通常不会与其他 Actor 共享任何内容,因此您不必同步代码。有关更多信息,请参阅http://doc.akka.io/docs/akka/2.1.4/general/terminology.html。
总的来说,我认为 Scala 可以使用 Java 拥有的任何东西,并提供更多机制来完成更复杂的事情。