3
我一直在使用F#powerpack一段時間,它有很棒的PSeq模塊,它工作得很好。PSeq是在F#3.0中使用的正確方法嗎?
但是它沒有正確的味道,因爲這是對F#庫的擴展,而不是標準庫。是否有更正確的方法來執行F#中的通用並行機制?
我知道這是一個相當普遍的問題,但我似乎無法找到一個明確的答案其他地方也就是近期(如2013年)
我一直在使用F#powerpack一段時間,它有很棒的PSeq模塊,它工作得很好。PSeq是在F#3.0中使用的正確方法嗎?
但是它沒有正確的味道,因爲這是對F#庫的擴展,而不是標準庫。是否有更正確的方法來執行F#中的通用並行機制?
我知道這是一個相當普遍的問題,但我似乎無法找到一個明確的答案其他地方也就是近期(如2013年)
正如意見中提到的PSeq
模塊僅僅是一個瘦包裝超過the Parallel LINQ library。主要目的是給你一個很好的語法,兼容流水線和Seq
和其他標準模塊使用的樣式。
因此,如果並行LINQ在您的情況下是正確的,那麼PSeq
模塊是從F#使用它的最佳方式。也就是說,如果您的集合具有正確的結構,PLINQ只會提高性能 - 您需要處理相當大的集合,並且您正在運行的操作不是微不足道的(否則,會有很多開銷)。
此外,使用PSeq
最簡單的方法可能只是爲了PSeq.fs
和PSeq.fsi
複製到項目(它們是F#PowerPack中的一部分,但如果你只關心PSeq
,然後複製這兩個文件是你所需要的) 。
好吧,來自F#PowerPack的'PSeq'似乎是'ParallelQuery'上的一個小包裝,它使得它成爲'ParallelEnumerable'的F#鏡像。考慮到只有'Array.Parallel'模塊和'ParallelEnumerable'已經內置到框架中,我沒有理由不使用它(直接或通過F# - 友好包裝器)。它畢竟是默認的.NET生態系統的一部分...... –
簡短的回答是:-)(假定數據和處理的結構是這樣的,使用PLINQ實際上可以高效地工作)。 –
感謝Tomas - 我希望這會是這樣,但真的很奇怪爲什麼PSeq不是內置模塊 –