1

假设我有一个服务器Scala,它处理传入的客户端请求。我有def process(req: Request): Response处理请求的功能。现在我想只K同时处理请求并将M请求保留在队列中。

Java我可能会创建一个ThreadPoolExecutor带有K线程和一个大小的队列MScala现在我想知道如何使用Actors/Futures等来做到这一点。

4

1 回答 1

2

如果你必须有def process(req: Request): Response),那么我认为你的 Scala 解决方案可能会类似于 Java。如果你能拥有def process(req: Request): Future[Response],它会开启其他可能性。

使用期货时,您(隐式或显式)提供一个可以从 Java 执行器构造的执行上下文。因此,您可以通过这种方式选择线程池大小和队列大小。使用期货的好处是您可以使用mapandflatMap和其他一些组合器来组合它们。有关更多信息,请参阅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 拥有的任何东西,并提供更多机制来完成更复杂的事情。

于 2013-06-29T22:54:25.857 回答