アプリケーションの一部で完全な並列処理が必要なシナリオでは、F#はC#よりも優れていますか?
私の主な言語はC#であり、アプリの上に構築されたコア機能(C#)が非常に並列である必要があり、計画されているアプリを作成しています。
これらのクラスをF#で実装する方が良いですか?
アプリケーションの一部で完全な並列処理が必要なシナリオでは、F#はC#よりも優れていますか?
私の主な言語はC#であり、アプリの上に構築されたコア機能(C#)が非常に並列である必要があり、計画されているアプリを作成しています。
これらのクラスをF#で実装する方が良いですか?
Microsoftが開発しているParallelExtensionsを見てみます。
データのセットを並行して処理する必要がある場合は、ParallelFX が非常に便利です。彼らは、C# で手動で行うことから多くの苦痛を取り除くでしょう。
しかし、コードに多くの非同期コードが含まれている場合、F# の async モナドを使用すると、C# で行うよりもはるかに簡単になります。多くの BeginXXX/EndXXX または恐ろしい XXXAsync/XXXCompletedEvent コードを見ている場合は、F# が大きなメリットになります。
それ以外の場合は、C# よりも F# の方が一般的に優れているだけです。
Luca Bologneseによるこのデモンストレーションによると、並列処理の実装の容易さはF#の強みの1つです。約53分のマークで、それはかなり印象的になります。これが少し役立つことを願っています。 http://channel9.msdn.com/pdc2008/TL11/
一般に、F# には C# よりも多くの利点があり、これらは並列プログラミングのコンテキストで同等の役割を果たしますが、F# プログラミング言語には、並列プログラミングに実質的に適しているものは何もありません。
特に、副作用を避けて純粋に関数型にすることが並列処理の万能薬であるという神話がありますが、これはナンセンスです。純粋に機能的なプログラムでより多くのコアをより簡単に消費させることはできますが、マルチコアで競争力のある絶対的なパフォーマンスとスピードアップを実現することは未解決の問題です。
他の人が既に言ったように、.NET 4 の一部となった Task Parallel Library を使用することはほぼ確実です。Visual F# 2010 標準ライブラリには、.NET など、TPL を使用する関数がいくつか含まれていることに注意してくださいArray.Parallel.map
。
F#にはほとんど副作用がないので、そうですが、UIを実装する必要はありません。反対に、LINQを介して次のバージョンのC#に組み込まれる多くの並列機能があります。
また、トレーニング要件と、F#がまだRTMでなく、今年の終わりまではRTMにならないという事実を比較検討する必要があります。
F#は特定のアプローチ(ネイティブメッセージのサポートなど)を改善しますが、可変状態を最小化(またはより適切に排除)すれば、C#でそれを実行できます。
他の回答で述べられているように、.NETライブラリは、並列拡張機能を使用して、この方法ですぐに大きな後押しを得るでしょう。ただし、ロックの使用を開始した場合、これらにはまったく同じスケーラビリティの欠如があります。