当前位置:  开发笔记 > 编程语言 > 正文

在嵌套循环中并行化代码

如何解决《在嵌套循环中并行化代码》经验,为你挑选了0个好方法。

您总是听说功能代码本质上比非功能代码更容易并行化,因此我决定编写一个执行以下操作的函数:

给定字符串输入,总计每个字符串的唯一字符数.因此,给定输入[ "aaaaa"; "bbb"; "ccccccc"; "abbbc" ],我们的方法将返回a: 6; b: 6; c: 8.

这是我写的:

(* seq<#seq> -> Map *)
let wordFrequency input =
    input
    |> Seq.fold (fun acc text ->
        (* This inner loop can be processed on its own thread *)
        text
        |> Seq.choose (fun char -> if Char.IsLetter char then Some(char) else None)
        |> Seq.fold (fun (acc : Map<_,_>) item ->
            match acc.TryFind(item) with
            | Some(count) -> acc.Add(item, count + 1)
            | None -> acc.Add(item, 1))
            acc
        ) Map.empty

这段代码理想上是可并行化的,因为每个字符串input都可以在自己的线程上处理.它不像它看起来那么简单,因为内部循环将项添加到所有输入之间共享的Map.

我想将内部循环考虑到自己的线程中,我不想使用任何可变状态.如何使用Async工作流程重新编写此功能?

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有