相关疑难解决方法(0)

任务并行库与异步工作流

我有一些用c#编写的执行并发代码的东西,大量使用任务并行库(Task and Future continuation chains).

我现在将其移植到F#,并试图找出使用F#Async工作流与TPL中的构造的优缺点.我倾向于TPL,但我认为无论哪种方式都可以.

有没有人有关于在F#中编写并发程序的提示和智慧?

f# asynchronous task-parallel-library

27
推荐指数
1
解决办法
6696
查看次数

为什么我不应该使用F#异步工作流来实现并行化?

我最近一直在学习F#,特别感兴趣的是它易于利用数据并行性.这个data |> Array.map |> Async.Parallel |> Async.RunSynchronously成语似乎很容易理解,直接使用并从中获得真正的价值.

那么为什么它async不是真正意图呢?Donald Syme本人表示,PLINQ和期货可能是更好的选择.我在这里读到的其他答案同意这一点以及推荐TPL.(PLINQ与上述内置函数似乎没什么不同,只要您使用F#Powerpack来获取PSeq函数.)

F#和函数式语言对此非常有意义,并且一些应用程序async并行性方面取得了巨大成功.

那么为什么我不应该async用来执行并行数据流程呢?通过编写并行async代码而不是使用PLINQ或TPL,我将失去什么?

parallel-processing f# asynchronous task-parallel-library

19
推荐指数
2
解决办法
3011
查看次数

F#Async.Parallel会加速计算吗?

"Async.Parallel"结构真的有助于在多核系统上更快地进行计算吗?.NET TPL"任务"是否以某种方式涉及到这里?

open System;

let key = Console.ReadKey(true);
let start = System.DateTime.Now

let pmap f l = seq { for a in l do yield async {return f a} } |> Async.Parallel |> Async.RunSynchronously
let map f l = seq {for a in l do yield f a}

let work f l = 
 match key.KeyChar with 
  | '1' -> pmap f l  
  | '2' -> Seq.toArray (map f l) 
  | _ -> [||]

let result = work (fun x -> …
Run Code Online (Sandbox Code Playgroud)

parallel-processing f#

8
推荐指数
2
解决办法
3206
查看次数