F# 异步编程





3.00/5 (2投票s)
在 F# 等函数式语言中进行异步编程真是轻而易举……
引言
F# 是一种强类型语言,类似于 C#,但具有轻量级语法,通常出现在 Python 等动态语言中。这使得您的 F# 程序具有轻量级、数学化的感觉。
基本上,我们未来将不会获得更快的 CPU。我们将获得的是更多的 CPU。程序员面临的挑战是编写能够利用这些额外 CPU 的软件…… 似乎每篇关于并发的教程都必须引用 Herb Sutter 在软件领域的 免费午餐结束了:向并发的根本转变。
背景
还有许多其他地方可以找到有关 F# 的有用信息。首先,有一个官方 F# 网站,您可以在其中找到语言规范、文档和其他有用的资源。 还有两本关于 F# 的书(一本已经出版)Expert F#(作者:Don Syme、Adam Granicz 和 Antonio Cisternino)和 Foundations of F#(作者:Robert Pickering)。
Using the Code
本教程的代码展示了如何在 F# 中实现这一点,以及它是多么容易。
open System
type Class1 (ind:int) =
let randomnum = new Random()
member this.Func1 () =
System.Threading.Thread.Sleep(randomnum.Next(5)*1000)
printfn "this is the thread name %A" ind
type public SampleAsync () =
let listofClass1 =
[for i in 1 .. 10 -> new Class1(i)]
member public this.fetchAsync(cls:Class1) =
async{
try
cls.Func1()
with
| ex -> printfn "error: %A" ex.Message
}
member public this.runAll() =
listofClass1
|> Seq.map this.fetchAsync
|> Async.Parallel
|> Async.RunSynchronously
|> ignore
let sampleasync = new SampleAsync()
sampleasync.runAll()
在这里,我创建了一个简单的类,该类具有一个成员,该成员在每个类上生成一个随机休眠。
关注点
F# 会取代 C++ 吗?
至少在某种程度上,F# 程序可以与 C++ 程序相媲美。以下是 Flying Frog 博客的链接,人们在那里对光线追踪进行了比较
http://fsharpnews.blogspot.com/2010/03/f-vs-unmanaged-c-for-parallel-numerics.html
“我们最近在比较用 F# 和 C++ 编写的优化并行光线追踪器时,获得了一个令人惊讶的性能结果。以下两个程序渲染相同的复杂场景,其中包含超过一百万个对象。令人惊讶的是,136 行托管 F# 程序运行速度略快,为 17 秒,而 168 行非托管 C++ 程序需要 18 秒。”