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