2011-08-23 58 views
11

Scala似乎对Java有很多功能和改进。我很难分离出我想先学习Scala的东西。我应该在Google上寻找什么,例如,如果我只是想要循环并使它们在多个线程或进程上运行?我来自GPU计算背景,从中可以很容易得到如何让事情更快运行的高级视图。试图寻找专注于多线程的Scala教程

回答

21
  • Scala的并行收集是特别容易。并行化一个昂贵的操作f(i)在整数i <- 1 to 10就是这么简单,

    (1 to 10).par.map(i => f(i)) 
    

    斯卡拉将尝试分配一些工作线程比得上在系统中可用内核/处理器的数量。以下是一个视频,其中包含更多详细信息:http://days2010.scala-lang.org/node/138/140

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

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

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

  • 对于来自斯卡拉GPU编程,有ScalaCL。您也可以使用Java bindings

  • 还有正在做在斯坦福和洛桑联邦理工学院实验室的共同努力非常有趣的语言虚拟化的工作。 This page有链接到论文,并有一个course at Stanford与更多的链接。在异构计算环境(包括GPU)上开发用于高性能计算的DSL有几个令人兴奋的应用。

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

+0

感谢STM,不知道这一点。看起来很有希望。 –

+0

这个答案实际上是FTW。你应该粘贴一个链接到库和工具wiki,尽管... –

+0

@Daniel,更新,谢谢。 –