【问题标题】:Is PSeq the correct approach to use in F# 3.0?PSeq 是在 F# 3.0 中使用的正确方法吗?
【发布时间】:2013-12-26 06:06:49
【问题描述】:

我使用 F# powerpack 已经有一段时间了,它内置了很棒的 PSeq 模块,而且效果非常好。

但它闻起来并不正确,因为这是 F# 库的扩展,而不是标准库。是否有更“正确”的方式在 F# 中执行一般并行性?

我知道这是一个相当笼统的问题,但我似乎无法在最近的其他任何地方(例如 2013 年)找到明确的答案

【问题讨论】:

  • 好吧,来自 F# PowerPack 的 PSeq 似乎是 ParallelQuery<T> 的薄包装,这使它成为 ParallelEnumerable 的 F# 镜像。考虑到只有 Array.Parallel 模块和 ParallelEnumerable 已经内置到框架中的事实,我认为没有理由不使用它(直接或通过 F# 友好的包装器)。毕竟它是默认 .NET 生态系统的一部分......
  • 简短的回答是肯定的 :-)(前提是数据和您的处理的结构使得使用 PLINQ 实际上可以有效地工作)。
  • 感谢 Tomas - 我希望是这样,但真的很奇怪为什么 PSeq 不是内置模块

标签: f# parallel-processing


【解决方案1】:

正如 cmets 中提到的,PSeq 模块只是对the Parallel LINQ library 的一个薄包装。主要目的是为您提供一个很好的语法,与流水线兼容以及与Seq 和其他标准模块一起使用的样式。

因此,如果 Parallel LINQ 在您的情况下是正确的,那么 PSeq 模块是从 F# 使用它的最佳方式。也就是说,PLINQ 仅在您的集合具有正确的结构时才能提高性能 - 您需要处理相当大的集合并且您正在运行的操作非常重要(否则,会有很多开销)。

另外,使用PSeq 的最简单方法可能只是将PSeq.fsPSeq.fsi 复制到您的项目中(它们是F# PowerPack 的一部分,但如果您只关心PSeq,那么复制你只需要两个文件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2018-12-31
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多