Scala Fork Join Pool,如何实现多个没有并发结构的任务

Scala Fork Join Pool, How to implement for multiple tasks that Do not have a Concurrent Structure

好的,所以我对 Scala 非常陌生(昨天开始)。我一直在阅读有关并发的文档,但未能找到如何 运行 在 fork Join Pool 中使用 Callables 处理更大的任务。这就是我在 Scala Java 中使用的草图。

 private Object fjp{
       val fjp:ForkJoinPool=new ForkJoinPool(Runtime.getRuntime.availableProcessors()*2)
       var w:Int=0

       def invokeObjects(collection:Collection[Callable[Map[String:Int]]]){
          var futures=fjp.invokeAll(collection)

          w=0
          while(fjp.isQuiescent()==false && fjp.getActiveThreadCount()==0){
            w=w+1
          }
          println("Checked "+w+" times")

          for(i<-0 to futures.size()){
            var mp=futures.get(i).get()
            //add keys to a common list
            //submit count with frequency to sparse matrix 
            //avoid a ton of locking
          }

       }
 }

我如何将代码变成一个我可以不断调用的 forkjoin 池。如果可能的话,我可以在没有另一个列表的情况下使用 foreach 来获得结果吗?感谢您的帮助。它也会为我指明 Scala 的正确方向。

一般来说,我不会费心去完全遵循那条路。 Scala 有一个非常干净的范例,以便 运行 感觉更惯用的并行计算。

如果您不熟悉 Scala 中的异步计算,我建议您开始 reading this

特别是,您可以定义and/or 重用几种 ExecutorContext 以获得您需要的线程池。或者,如果您不阻塞线程,则可以使用默认线程(默认情况下,每个内核只有一个线程)