F#是否为您提供自动并行性?

时间:2009-03-25 17:50:02

标签: f# parallel-processing

我的意思是:当你自由设计你的app副作用时,F#代码会自动分布在所有核心上吗?

8 个答案:

答案 0 :(得分:15)

不,我不敢。鉴于F#不是函数式语言(在最严格的意义上),我相信这样做会相当困难。在F#中充分利用并行性的主要方法是使用异步工作流(主要通过我认为的异步模块)。在.NET 4.0中引入的TPL(任务并行库)将在F#中扮演类似的角色(尽管它可以在所有.NET语言中同样使用),尽管我不能说我'我确定它将如何与现有的异步框架集成。也许微软只是建议将TPL用于所有事情,或者他们可能会将两者作为一种选择,最终将成为事实上的标准......

无论如何,这里有一些关于F#中异步编程/工作流的文章,可以帮助您入门。

答案 1 :(得分:8)

F#不会自动化,只是简单易用。

又有机会链接到Luca's PDC talk。从52:20开始的8分钟是F#异步工作流程的一个很棒的演示。它摇滚!

答案 2 :(得分:3)

不,我很确定它不会自动并行化。它必须知道你的代码是无副作用的,这可能很难证明,但有一点。

当然,F#可以让更容易并行化您的代码,特别是如果您没有任何副作用......但这是另一回事。

答案 3 :(得分:2)

与其他提到的一样,F#不会自动扩展到核心,并且仍然需要一个框架,例如Josh提到的ParallelFX端口。

F#通常与并行处理的可能性相关联,因为它默认为对象是不可变的,因此在许多情况下无需锁定。

答案 4 :(得分:2)

关于纯度注释:Code Contracts具有Pure属性。我记得听过BCL的某些部分已经使用过这个。潜在地,这个属性也可以被并行化框架使用,但我现在还不知道这样的工作。另外,我甚至不确定代码联系人在F#中的使用情况有多好,所以这里有很多未知数。

但是,看看所有这些东西是如何组合在一起的将会很有趣。

答案 5 :(得分:1)

不,不会。您仍然必须通过F#支持的众多机制之一显式封送对其他线程的调用。

答案 6 :(得分:1)

我的理解是,它不会Parallel Extensions is being modified使它被F#消费。哪个不会让它自动多线程,应该让它很容易实现。

答案 7 :(得分:1)

嗯,你有答案,但我只想补充一点,我认为这是F#最重要的限制因素,因为它是混合命令/功能语言。

我希望看到F#的一些扩展,声明一个函数是 pure 。也就是说,它没有没有功能类型表示的副作用。我们的想法是,只有当函数引用其他“已知纯粹”函数时,它才是纯函数。当然,只有在可以要求作为函数参数传递的委托引用纯函数时,这才有用。