Functional programming 什么函数语言实现允许线程并行运行?
ocamlgc强制使用一个全局锁,防止变种(线程)并行运行,尽管它们可以并发(交错)运行。我相信SML/NJ和MLton也是如此,但PolyML、GHC、F#、Clojure和Scala却不是如此Functional programming 什么函数语言实现允许线程并行运行?,functional-programming,parallel-processing,Functional Programming,Parallel Processing,ocamlgc强制使用一个全局锁,防止变种(线程)并行运行,尽管它们可以并发(交错)运行。我相信SML/NJ和MLton也是如此,但PolyML、GHC、F#、Clojure和Scala却不是如此 还有哪些函数式语言实现允许线程并行运行?Haskell via我很高兴地告诉您,您是对的,基于CLR的F#根本不受该限制,而是受益于多线程特定功能,包括和即将推出的精彩(.NET 4.0)任务并行库。Scala和Clojure都在JVM上运行,这允许真正的并发而没有任何单点争用瓶颈。除了Haskell
还有哪些函数式语言实现允许线程并行运行?Haskell via我很高兴地告诉您,您是对的,基于CLR的F#根本不受该限制,而是受益于多线程特定功能,包括和即将推出的精彩(.NET 4.0)任务并行库。Scala和Clojure都在JVM上运行,这允许真正的并发而没有任何单点争用瓶颈。除了Haskell之外,您还可以在Erlang(面向并发的编程)中并发运行进程您也可以在F#中使用and来实现这一点。Erlang实现自己的进程和进程调度,并允许数千、几万甚至数百万个Erlang进程(在单个操作系统进程内) 在SMP和多核机器中,Erlang虚拟机将向其进程调度器和进程队列分配尽可能多的OS线程和OS进程,以最大限度地利用硬件体系结构中的底层并发操作
当然,向应用程序公开的并发范例保持不变。有许多好的实现。目前,哈斯凯尔人似乎得到了最好的结果(参见)。Erlang紧随其后,特别是如果您想要分布式的话
在六到十二个月内,答案可能会发生变化:-)python不是一种特别的函数式语言,而且与GIL也不是很并行,但与模块(自2.6以来的标准)结合在一起,两者都有,但它没有纯函数式语言那么优雅
只是一些补充,以确认推测列表的其他部分:
- Poly/ML自版本5.2(2006年起)起支持本机线程(POSIX线程或Windows线程)。当前的Poly/ML 5.5(2012年夏季)改进了对并行内存管理的支持:一些GC阶段使用多线程,特别支持在线共享不可变值,以减少大型应用程序的内存占用
- Isabelle/ML为Poly/ML线程提供了一个附加的未来库。Isabelle是一个交互式定理证明者,但它与基于Poly/ML的扩充版SML集成在一起
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
print result.get(timeout=1) # prints "100" unless your computer is *very* slow
print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"