let the |> fun begin
DESCRIPTION
An introduction to F# (part 2). Let the |> fun begin. Bogdan Brinzarea-Iamandi Banca Romaneasca. 25 February 2010. Agenda. Asynchronous and parallel programming. Why should these matter to me?. Why should these matter to me?. Working with threads is difficult - PowerPoint PPT PresentationTRANSCRIPT
Let the |> fun beginAn introduction to F# (part 2)
Bogdan Brinzarea-IamandiBanca Romaneasca
25 February 2010
Agenda
Topic Covered Today
History 22 february 2010
From imperative to functional 22 february 2010
Fundamentals 22 february 2010
Data structures 22 february 2010
Pattern Matching 22 february 2010
Immutability vs. Mutability 22 february 2010
Object Oriented Programming 22 february 2010
Async and Parallel Programming
Unit testing
Asynchronous and parallel programming
Why should these matter to me?Problem Solution
I/O bound application Asynchronous processing
CPU bound application Parallel and distributed processing
Freezing UI Asynchronous processing
Sharing state Immutability
Why should these matter to me?
Working with threads is difficult Synchronizing and sharing state are
difficult Introducing bugs is easy The code is complicated
Parallel and reactive language
Multiple active evaluations (threads computing results)
Multiple pending reactions (callbacks and agents waiting for events and messages)
Background worker pattern
Not useful for asynchronous operations
Imperative programming Sharing mutable data between
threads Cancellations Raising events in the right thread
Immutability
Optimization opportunities Easily transferable between threads Reliability
Async advantages
Ease of change Cancellation checking Simple resource management Exception propagation
async {…}
Creates async objects These tasks can be run
In the current thread In a background thread In parallel using fork/join mechanism As continuations
Async.Parallel
Takes async objects and creates async tasks
Uses QueueUserWorkItem Fork/join patternDoes not report progress
seq<Async<'T>> -> Async<'T Array>
Async.RunSynchronously
Runs synchronous computation Waits for the result Batch processing jobs Matrix multiplication
Async.StartWithContinuations
Starts and ends in the same thread Useful for UI updating Continuations for:
Complete Exception Cancellation
! = async
let! for async method calls The thread is suspended until the
result in available The rest of the code runs as a
continuation use! resource disposing equivalent
of let!
Parallel programming
Leverage parallel hardware capabilities
Data parallel programming with PLinq Easy to implement Abstracts away complexity Transparent partition and merge
operations Works on seq<a> and IEnumerable<T>
Task parallel programming using the new Task Parallel Library in .NET 4.0
Agent model concurrency
Erlang message passing style
“An actor is a computational entity that, in response to a message it receives, can concurrently:▪ send a finite number of messages to
other actors;▪ create a finite number of new actors;▪ designate the behavior to be used for
the next message it receives.”
Agent model concurrency
Asynchronous message passing Can have even 1000 agents Agents are lightweight Based on async programming State isolation between agents No concurrency and data races
Unit testing
Object oriented approach
NUnit xUnit.net
Functional approach
FsUnit based on NUnit FsCheck inspired from Haskell’s
QuickCheck FsTest based on xUnit.net NaturalSpec based on NUnit FsSpec readable DSL
Resources
Expert F# by Don Syme Programming F# by Chris Smith CTO Corner - http://ctocorner.com/fsharp/book/ HubFS
http://cs.hubfs.net/ Matthew Podwysocki
http://weblogs.asp.net/podwysocki/ Don Syme
http://blogs.msdn.com/dsyme Chris Smith
http://blogs.msdn.com/chrsmith/