2013-12-09 24 views
3

我一直在使用F#powerpack一段時間,它有很棒的PSeq模塊,它工作得很好。PSeq是在F#3.0中使用的正確方法嗎?

但是它沒有正確的味道,因爲這是對F#庫的擴展,而不是標準庫。是否有更正確的方法來執行F#中的通用並行機制?

我知道這是一個相當普遍的問題,但我似乎無法找到一個明確的答案其他地方也就是近期(如2013年)

+0

好吧,來自F#PowerPack的'PSeq'似乎是'ParallelQuery '上的一個小包裝,它使得它成爲'ParallelEnumerable'的F#鏡像。考慮到只有'Array.Parallel'模塊和'ParallelEnumerable'已經內置到框架中,我沒有理由不使用它(直接或通過F# - 友好包裝器)。它畢竟是默認的.NET生態系統的一部分...... –

+1

簡短的回答是:-)(假定數據和處理的結構是這樣的,使用PLINQ實際上可以高效地工作)。 –

+1

感謝Tomas - 我希望這會是這樣,但真的很奇怪爲什麼PSeq不是內置模塊 –

回答

1

正如意見中提到的PSeq模塊僅僅是一個瘦包裝超過the Parallel LINQ library。主要目的是給你一個很好的語法,兼容流水線和Seq和其他標準模塊使用的樣式。

因此,如果並行LINQ在您的情況下是正確的,那麼PSeq模塊是從F#使用它的最佳方式。也就是說,如果您的集合具有正確的結構,PLINQ只會提高性能 - 您需要處理相當大的集合,並且您正在運行的操作不是微不足道的(否則,會有很多開銷)。

此外,使用PSeq最簡單的方法可能只是爲了PSeq.fsPSeq.fsi複製到項目(它們是F#PowerPack中的一部分,但如果你只關心PSeq,然後複製這兩個文件是你所需要的) 。

相關問題