试图找到专注于多线程的Scala教程

时间:2011-08-23 14:32:24

标签: java multithreading scala loops multiprocessing

Scala似乎比Java有很多功能和改进。我很难分离出我想先学习Scala的东西。如果我只想采取循环并让它们在多个线程或进程上运行,我应该在Google上寻找什么?我来自GPU计算背景,在这里可以非常简单地了解如何让事情更快地运行。

1 个答案:

答案 0 :(得分:21)

  • Scala的并行集合特别容易。将昂贵的操作f(i)与整数i <- 1 to 10并行化,就像

    一样简单
    (1 to 10).par.map(i => f(i))
    

    Scala将尝试分配一些与系统中可用的核心/处理器数量相当的工作线程。以下是包含更多详细信息的视频:http://days2010.scala-lang.org/node/138/140

  • Akka framework是一种成熟的,主要基于actor的并发方法,允许在线程或远程进程上进行并行化。 Actor基本上是可以传递消息而不是共享状态的线程。新成立的公司Typesafe正在开发Scala语言和Akka。

  • 您还可以为Scala尝试draft release软件事务内存(STM)库。该库旨在包含在标准的Scala发行版中。与手动管理的线程相比,STM是一种更简单的并发模型,可以减少诸如死锁之类的错误。它的工作原理是将通信操作序列分组为单个同步块,如果多个线程执行的共享状态变得互不兼容,则可能会失败并回滚。据推测,为方便起见需要付出一些性能成本;我不确定STM如何扩展到大量线程。

  • Spark framework解决了群集计算问题,似乎是MapReduce的概括。

  • 对于Scala的GPU编程,有ScalaCL。您也可以使用Java bindings

  • 作为斯坦福大学和EPFL实验室之间的共同努力,还有非常有趣的语言虚拟化工作。 This page包含指向论文的链接,并且course at Stanford有更多链接。在包括GPU在内的异构计算环境中开发用于高性能计算的DSL有几个令人兴奋的应用程序。

更新。 Daniel Sobral也建议Tools and Libraries wiki