什么功能语言实现允许线程并行运行?

Jon*_*rop 5 parallel-processing functional-programming

OCaml GC强制执行全局锁定,以防止mutators(线程)并行运行,尽管它们可以并发运行(交错).我相信SML/NJ和MLton也是如此,但不是PolyML,GHC,F#,Clojure和Scala.

还有哪些其他功能语言实现允许线程并行运行?

Nor*_*sey 11

那里有很多很好的实现.目前,Haskell人似乎获得了最好的结果(参见Simon Marlow和其他人的ICFP 2009论文以及Donnie Jones和其他人的Haskell Symposium 2009论文).Erlang非常落后,特别是如果你想分发.

在六到十二个月内,答案可能已经改变:-)

  • @Jon:你的证据在哪里? (6认同)
  • 将您引用的论文中引用的性能测量值与用其他语言编写的等效程序进行比较.例如,第二篇论文给出了并行快速排序(~14s只能排序100k整数)的性能结果,这比大多数其他语言的体面解决方案慢100倍.您也可以自己对并行程序进行基准测试.我对Saynte的天然并行化进行了详尽的研究,该并行化应用于我的光线跟踪器中的四个Lennart的Haskell实现,并发现一个人停止了6个核心的扩展,所有其他人只停止了5个核心的扩展. (3认同)
  • 那些Haskell结果毫无价值:它们的并行实现通常比大多数串行实现慢几个数量级. (2认同)
  • 相比之下,我在F#中编写了并行线性代数代码,在英特尔硬件上运行时,其性能优于英特尔MKL中供应商调优的Fortran. (2认同)

Kev*_*son 6

Scala和Clojure都在JVM上运行,它允许真正的并发,没有任何单点争用瓶颈.


Gor*_*rie 6

Erlang实现了自己的流程和流程计划,并允许数千,数万甚至数百万个Erlang流程(在单个操作系统流程中).

在SMP和多核机器中,Erlang虚拟机将为其进程调度程序和进程队列分配尽可能多的操作系统线程和操作系统进程,以最大限度地利用硬件体系结构中的底层并发操作.

当然,暴露于应用程序的并发范例仍然是相同的.


em7*_*m70 5

我很高兴地告诉你,你是对的,基于CLR的F#完全没有受到这种限制,而是受益于多线程特定功能,包括异步工作流,邮箱处理器和即将推出的即将发布的功能(.NET 4.0)任务并行库.