1
12
见 Task Parallel Library vs Async Workflows . 我将把基本知识总结如下: 任务并行库 :允许多个工作单元在多个核心上高效运行,包括相对简单的场景,例如生成多个线程并行执行类似的计算,以及更复杂的操作,其中计算本身也最终生成其他任务。使用改进的.NET 4.0线程池和工作窃取队列来确保所有核心都处于繁忙状态。 异步工作流 :允许异步计算在不占用不需要的线程的情况下运行,并在结果可用时启动回调。 普林克 :使用plinq编写的代码最终通过tpl运行,但对于使用linq查询轻松表示的代码来说,这是一个更好的接口(例如,对数据数组中的每个项目并行执行单个操作)。
请注意,异步工作流可以使用
对我来说,经验法则是,如果你在不同的线程上进行大量的计算,你会想要使用tpl(可能通过plinq或f等价物,如pseq模块),而如果你试图做大量的IO(无论是否并行),你应该使用异步工作流。 因此,光线跟踪器将使用tpl启动任务,并行渲染每个像素(或扫描线),最大限度地提高计算机的可用计算能力。 但是,由于没有太多的计算可以在核心之间传播,下载大量的网页将通过异步工作流完成;当结果出现时,操作系统只需要通知您。 |
2
1
异步工作流是通过F_monadic语法实现的。这意味着,您可以编写自己的基于并行任务库的“异步”版本,而不是将工作流转换为任务。我说这个有几个警告:
有关如何在f_中实现monad的更多详细信息,请参阅“专家f_”一书或在“f_monads”上搜索一点。 我知道答案不完整,但希望能有所帮助。 |
Thomas · 使类型别名在F中不可互换# 2 年前 |
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 6 年前 |
Soldalma · 我可以实例化包含顶级副作用值的类吗? 6 年前 |
matekus · F#-包含数字的字符串的自然排序 6 年前 |
matekus · F#类型匹配-无法创建映射或匹配记录 6 年前 |
Rob Lyndon · 未找到F#ProvidedTypes文件 6 年前 |
red-swan · 如何将intro ML.Net演示翻译为F#? 6 年前 |
jkone27 · F#-在编译时从字符串生成简单的空类型 6 年前 |