Async Programming in
         F#
    Zhao Jie - SNDA - June 2010
About Me
•       /        / Jeffrey Zhao /

• Programmer
• Blogger - http://blog.zhaojie.me/
• Twitterer: @jeffz_cn
• F#, ...
What’s F#

• Languages by Don Syme, MS Research
• Strongly Statically Typed Language
• Functional Language with OO Ability...
Async programming is
     complex ...
...and will only get
more complex in the
      near future
Four Big Concurrency
     Challenges
• Shared State
• Code Locality
• I/O Parallelism
• Scaling Up
Shared State

• Difficult to maintain and test
• Very difficult to parallelize
• Locking is fundamentally error prone
 ‣ Mus...
Demo: Immutability
Immutability in F#

• Immutable Union     • Immutable Tuple
• Immutable Record    • Immutable List
• Immutable Set       •...
Code Locality

• Used to expressing algorithms linearly
• Async requires logical division of algorithms
• Very difficult to...
Asynchronous Workflow


    async	
  {	
  ...	
  }
React

async	
  {
	
  	
  	
  	
  let!	
  res	
  =	
  <async	
  work>
	
  	
  	
  	
  ...	
  }
        an HTTP Response
  ...
async	
  {
                   	
  	
  	
  	
  let!	
  img	
  =	
  AsyncRead	
  "http://..."
                   	
  	
  	
 ...
Demo: Code Locality
I/O Parallelism

• Software is often I/O-bound
 ‣ Leveraging web services
 ‣ Working with data on disk
• Network and disk ...
Demo: I/O Parallelism
Scaling to Multi-Machine

• To scale up, must to go beyond a single machine
• Multi-machine resources becoming common
  ‣ ...
... the principle we go by is, don't expect to see
a particular concurrency model put into C#
because there're many differ...
Demo: Agents
Concurrency Challenges

• Shared State - Immutability
• Code Locality - async { ... }
• I/O Parallelism - async { ... }
• ...
F#
• Modern, simple, powerful and productive
• Ready for production use with VS 2010
• Simplified parallel and async progra...
F# Resources
                 http://fsharp.net




Programming F#     Expert F# 2.0     Real World FP
Q &A
Thanks!
Upcoming SlideShare
Loading in...5
×

F#语言对异步程序设计的支持

2,754

Published on

如今的Web应用、 Silverlight以及各种分布式系统让异步解决方案有了更进一步的需求。F#是微软.NET平台上的函数式编程语言,并添加了不少让并行及异步编程变得有趣且轻松的特性。本次演讲将讨论F#的核心概念,并探讨F#中的不可变性、函数式设计、异步工作流、代理等特性是如何应对真实应用中的异步挑战的。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,754
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
84
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

F#语言对异步程序设计的支持

  1. 1. Async Programming in F# Zhao Jie - SNDA - June 2010
  2. 2. About Me • / / Jeffrey Zhao / • Programmer • Blogger - http://blog.zhaojie.me/ • Twitterer: @jeffz_cn • F#, Scala, JavaScript, Python, .NET, mono... • Java (as the language) hater
  3. 3. What’s F# • Languages by Don Syme, MS Research • Strongly Statically Typed Language • Functional Language with OO Ability • General Purpose Language
  4. 4. Async programming is complex ...
  5. 5. ...and will only get more complex in the near future
  6. 6. Four Big Concurrency Challenges • Shared State • Code Locality • I/O Parallelism • Scaling Up
  7. 7. Shared State • Difficult to maintain and test • Very difficult to parallelize • Locking is fundamentally error prone ‣ Must guess where parallelism is needed ‣ All consumers need to participate
  8. 8. Demo: Immutability
  9. 9. Immutability in F# • Immutable Union • Immutable Tuple • Immutable Record • Immutable List • Immutable Set • Immutable Map • Immutable Objects • Immutable ...
  10. 10. Code Locality • Used to expressing algorithms linearly • Async requires logical division of algorithms • Very difficult to ‣ Combine multiple asynchronous operations ‣ Deal with exceptions and cancellation
  11. 11. Asynchronous Workflow async  {  ...  }
  12. 12. React async  {        let!  res  =  <async  work>        ...  } an HTTP Response an UI Event a Timer Callback a Query Response a Web Servcie Response a Disk I/O Completion an Agent Message
  13. 13. async  {        let!  img  =  AsyncRead  "http://..."        printfn  "loaded!"        do!  AsyncWrite  img  @"c:..."        printfn  "saved!"  } = async.Delay(fun  -­‐>        async.Bind(AsyncRead  "http://...",  (fun  img  -­‐>                printfn  "loaded!"                async.Bind(AsyncWrite  img  @"c:...",  (fun  ()  -­‐>                        printfn  "saved!"                        async.Return())))))
  14. 14. Demo: Code Locality
  15. 15. I/O Parallelism • Software is often I/O-bound ‣ Leveraging web services ‣ Working with data on disk • Network and disk speeds increasing slower • I/O resources are inherently parallel ‣ Huge opportunity for performance
  16. 16. Demo: I/O Parallelism
  17. 17. Scaling to Multi-Machine • To scale up, must to go beyond a single machine • Multi-machine resources becoming common ‣ Roll-you-own clusters with cheap hardware ‣ On-demand cloud compute with Azure • But ‣ Shared memory doesn’t scale
  18. 18. ... the principle we go by is, don't expect to see a particular concurrency model put into C# because there're many different concurrency model ... it's more about finding things are common to to all kinds of concurrency ... - Anders Hejlsberg
  19. 19. Demo: Agents
  20. 20. Concurrency Challenges • Shared State - Immutability • Code Locality - async { ... } • I/O Parallelism - async { ... } • Scaling to Multi-Machine - Agents
  21. 21. F# • Modern, simple, powerful and productive • Ready for production use with VS 2010 • Simplified parallel and async programming for today and tomorrow • Support .NET 4.0 / 3.5 and mono • Open Source *
  22. 22. F# Resources http://fsharp.net Programming F# Expert F# 2.0 Real World FP
  23. 23. Q &A
  24. 24. Thanks!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×