Avi*_*lax 11 concurrency scala actor
我来自Java,我将Runnables 提交给一个ExecutorService由线程池支持的.在Java中非常清楚如何设置线程池大小的限制.
我对使用Scala actor感兴趣,但我不清楚如何限制并发性.
让我们假设,我正在创建一个接受"工作"的网络服务.提交作业的POST请求,我希望我的服务将作业排入队列然后立即返回202 Accepted- 即作业是异步处理的.
如果我使用actor来处理队列中的作业,我如何限制处理的同时作业的数量?
我可以想到几种不同的方法来解决这个问题; 我想知道是否有社区最佳实践,或者至少是一些明确建立的方法,这些方法在Scala世界中有些标准.
我想到的一种方法是让一个协调员角色来管理工作队列和工作处理者; 我想它可以使用一个简单的int字段来跟踪当前正在处理的作业数.我确信这种方法会有一些问题,例如确保跟踪何时发生错误以减少数量.这就是为什么我想知道Scala是否已经为此提供了更简单或更封装的方法.
顺便说一句我以前试过问这个问题,但我问得很厉害.
谢谢!
我真的很鼓励你看看Akka,Scala的替代Actor实现.
Akka已经有了一个JAX-RS [1]集成,您可以将它与LoadBalancer [2]配合使用,以限制在并行中可以执行的操作数量:
[1] http://doc.akkasource.org/rest [2] http://github.com/jboner/akka/blob/master/akka-patterns/src/main/scala/Patterns.scala
您可以覆盖系统属性actors.maxPoolSize并actors.corePoolSize限制actor线程池的大小,然后在actor中处理尽可能多的作业.为什么你认为你需要扼杀你的反应?