7

在应用程序的某些部分需要完全并行的情况下,F# 是否优于 C#?

我的主要语言是 C#,我正在编写一个应用程序,其中构建在应用程序 (C#) 之上的核心功能必须并且计划非常并行。

我在 F# 中实现这些类更好吗?

4

7 回答 7

6

我会看看Microsoft正在开发的 Parallel Extensions 。

于 2009-02-26T23:09:58.950 回答
5

如果您只需要并行处理数据集,ParallelFX 非常方便。他们将在 C# 中手动执行此操作会很痛苦。

但是,如果代码有很多异步代码,那么 F# 的 async monad 会比在 C# 中实现的要容易得多。如果您正在查看大量 BeginXXX/EndXXX 或可怕的 XXXAsync/XXXCompletedEvent 代码,那么 F# 将是一个重大胜利。

否则,您将获得 F# 优于 C# 的一般收益。

于 2009-02-27T03:52:30.703 回答
2

有两种方法可以使事情并行化,它们都在 F# 中工作得很好。

  • 正如 Josh 已经提到的,有一个 Parallel Extensions 库。这使得并行处理某些数据结构变得非常容易,尤其是您经常在 F# 中使用的不可变数据结构。因此,将并行扩展与 F# 相结合是正确的方法。这将在我即将出版的真实世界的 F# 书籍中讨论,但我正在提供源代码。这在第 14 章中有介绍,并且它的源代码应该很快就会提供。

  • 对于某些问题,您可以使用消息传递并发,这是共享内存的一种有吸引力的替代方案。您可以在Don Syme 书中的免费章节中找到一些相关信息。我的书中也将介绍它(第 13 章和第 16 章)。

  • 通过将消息传递并发与异步工作流相结合,您可以获得编写无法使用并行扩展轻松并行化的程序的绝佳方式(即它们需要共享一些信息并还使用异步非阻塞操作(例如从互联网下载) ))

于 2009-02-28T14:44:58.833 回答
2

根据 Luca Bolognese 的演示,易于实现并行是 F# 的强项之一。在大约 53 分钟的时候,它变得相当令人印象深刻。希望这个对你有帮助。 http://channel9.msdn.com/pdc2008/TL11/

于 2009-03-02T18:32:44.057 回答
2

总体而言,F# 与 C# 相比具有许多优势,并且这些优势在并行编程的上下文中发挥着同等作用,但 F# 编程语言并没有使它更适合并行编程。

特别是,有一个神话,即避免副作用和纯粹的功能是并行性的灵丹妙药,但这是无稽之谈。您可以让纯功能程序更轻松地燃烧更多内核,但在多核上获得具有竞争力的绝对性能和加速是一个未解决的问题。

As others have already said, you will almost certainly want to use the Task Parallel Library that is now part of .NET 4. Note that the Visual F# 2010 standard library includes several functions that use the TPL, such as Array.Parallel.map.

于 2011-04-10T11:17:43.873 回答
1

F# 基本上没有副作用,所以是的,但您不想在其中实现 UI。另一方面,下一个版本的 C# 将通过 LINQ 内置大量并行功能。

您还必须权衡您的培训要求以及 F# 还不是 RTM 并且要到今年年底才会出现的事实。

于 2009-02-26T23:10:47.217 回答
0

F# 使某些方法更好(例如本机消息支持),但如果您最小化(或更好,消除)可变状态,您可以在 C# 中做到这一点。

正如其他答案中所指出的,.NET 库很快就会通过并行扩展以这种方式得到很大的提升。但是,如果您开始使用锁,这些将同样缺乏可伸缩性。

于 2009-02-26T23:13:24.230 回答