SlideShare a Scribd company logo
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Parallel and Asynchronous
Programming
        Or how we built a Dropbox clone without a
        PhD in Astrophysics



             Panagiotis Kanavos
             DotNetZone Moderator
             pkanavos@gmail.com
Why
• Processors are getting smaller
• Networks are getting worse
• Operating Systems demand it
• Only a subset of the code can run in parallel
Processors are getting smaller
• Once, a single-thread process could use 100%
  of the CPU
• 16% ΜΑΧ ona Quad core LAPTOP with
  HyperThreading
• 8% ΜΑΧ on an 8 core server
What we used to have
• Hand-coded threads and synchronization
• BackgroundWorker
    Heavy, cumbersome, single threaded, inadequate progress reporting

• EAP: From event to event
    Complicated, loss of continuity

• APM: BeginXXX/EndXXX
    Cumbersome, imagine socket programming with Begin/End!
     or rather ...
Why I stopped blogging
• Asynchronous Pipes with APM
The problem with threads
• Collisions
     Reduced throughput
     Deadlocks

• Solution: Limit the number of threads
     ThreadPools
     Extreme: Stackless Python
     Copy data instead of shared access
     Extreme: Immutable programming
Why should I care about
threads?
• How can I speed-up my algorithm?
• Which parts can run in parallel?
• How can I partition my data?
Example




          Revani
Synchronous Revani
•   Beat the yolks with 2/3 of sugar until fluffy
•   Beat the whites with 1/3 of sugar to stiff meringue
•   and add half the mixture to the yolk mixture.
•   Mix semolina with flour and ground coconut ,
•   add rest of meringue and mix
•   Mix and pour in cake pan
•   Bake in pre-heated oven at 170οC for 20-25 mins.
•   Allow to cool
•   Prepare syrup, boil water, sugar, lemon for 3 mins.
•   Pour warm syrup over revani
•   Sprinkle with ground coconut.
Parallel Revani
• Beat yolks                   • Beat Whites
           •   Add half mixture
           •   Mix semolina
           •   Add rest of meringue
           •   Mix
           •   Pour in cake pan

• Bake                          • Prepare syrup
               • Pour syrup
               • Sprinkle
What we have now
• Support for multiple concurrency scenarios
• Overall improvements in threading
• Highly Concurrent collections
Scenaria
• Faster processing of large data
  • Number crunching
• Execute long operations
• Serve high volume of requests
  • Social Sites, Web sites, Billing, Log aggregators
• Tasks with frequent blocking
  • REST clients, IT management apps
Scenario Classification
• Data Parallelism
• Task Parallelism
• Asynchronous programming
• Agents/Actors
• Dataflows
Data Parallelism – Recipe
• Partition the data
• Implement the algorithm in a function
• TPL creates the necessary tasks
• The tasks are assigned to threads
• I DON’T’T have to define the number of
  Tasks/Threads!
Data Parallelism - Tools
• Parallel.For / Parallel.ForEach
• PLINQ
• Partitioners
Parallel class Methods
• Parallel execution of lambdas
• Blocking calls!
• We specify
     Cancellation Token
     Maximum number of Threads
     Task Scheduler
PLINQ
• LINQ Queries
• Potentially multiple threads
• Parallel operators
• Unordered results
• Beware of races
  List<int> list = new List<int>();
  var q = src.AsParallel()
    .Select(x => { list.Add(x); return x; })
    .Where(x => true) .Take(100);
What it can’t do
• Doesn’t use SSE instructions
• Doesn’t use the GPU
• Isn’t using the CPU at 100%
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Scenaria
• Data Parallelism
• Task Parallelism
• Asynchronous programming
• Agents/Actors
• Dataflows
Task Parellelism – Recipe
• Break the problem into steps
• Convert each step to a function
• Combine steps with Continuations
• TPL assigns tasks to threads as needed
• I DON’T have to define number of
  Tasks/Threads!
• Cancellation of the entire task chain
The Improvements
• Tasks wherever code blocks
• Cancellation
• Lazy Initialization
• Progress Reporting
• Synchronization Contexts
Cancellation
• Problem: How do you cancel multiple tasks
  without leaving trash behind?
• Solution: Everyone monitors a
  CancellationToken
     TPL cancels subsequent Tasks or Parallel operations
     Created by a CancellationTokenSource
     Can execute code when Cancel is called
Progress Reporting
• Problem: How do you update the UI from inside
  a task?
• Solution: Using an IProgress<T> object
     Out-of-the-Box Progress<T> updates the current Synch Context
     Any type can be a message
     Replace with our own implementation
Lazy Initialization
• Calculate a value only when needed
• Lazy<T>(Func<T> …)
• Synchronous or Asynchronous calculation
     Lazy.Value
     Lazy.GetValueAsync<T>()
Synchronization Context
• Since .NET 2.0!
• Hides Winforms, WPF, ASP.NET
     SynchronizationContext.Post/Send instead of Dispatcher.Invoke etc
     Synchronous and Asynchronous version

• Automatically created by the environment
     SynchronizationContext.Current

• Can create our own
     E.g. For a Command Line aplication
Scenaria
• Data Parallelism
• Task Parallelism
• Asynchronous programming
• Agents/Actors
• Dataflows
Async/Await
• Support at the language leve
• Debugging support
• Exception Handling
• After await return to original “thread”
     Beware of servers and libraries

• Dos NOT always execute asynchronously
     Only when a task is encountered or the thread yields
     Task.Yield
Asynchronous Retry
private static async Task<T>
Retry<T>(Func<T> func, int retryCount) {
  while (true) {
    try {
      var result = await Task.Run(func);
      return result;
    }
    catch {
      If (retryCount == 0)
        throw;
      retryCount--;
} } }
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
More Goodies - Collections
•   Highly concurrent
•   Thread-safe
•   Not only for TPL/PLINQ
•   Producer/Consumer scenaria
Concurrent Collections - 2
• ConcurrentQueue
• ConcurrentStack
• ConcurrentDictionary
The Odd one - ConcurrentBag
• Duplicates allowed
• List per Thread
• Reduced collisions for each tread’s Add/Take
• BAD for Producer/Consumer
Concurrent Collections -
Gotchas
• NOT faster than plain collections in low
  concurrency scenarios
• DO NOT consume less memory
• DO NOT provide thread safe enumeration
• DO NOT ensure atomic operations on content
• DO NOT fix unsafe code
Also in .NET 4
• Visual Studio 2012
• Async Targeting package
• System.Net.HttpClient package
Other Technologies
• F# async
• C++ Parallel Patterns Library
• C++ Concurrency Runtime
• C++ Agents
• C++ AMP
• Object storage similar to Amazon S3/Azure Blob
  storage
• A Service of Synnefo – IaaS by GRNet
• Written in Python
• Clients for Web, Windows, iOS, Android, Linux
• Versioning, Permissions, Sharing
Synnefo
Pithos API
• REST API base on CloudFiles by Rackspace
     Compatible with CyberDuck etc

• Block storage
• Uploads only using blocks
• Uses Merkle Hashing
Pithos Client for Windows
• Multiple accounts per machine
• Synchronize local folder to a Pithos account
• Detect local changes and upload
• Detect server changes and download
• Calculate Merkle Hash for each file
The Architecture

   UI         Core         Networking    Storage

             File Agent
  WPF
                            CloudFiles     SQLite
             Poll Agent
  MVVM
             Network
              Agent
                                         SQL Server
 Caliburn                   HttpClient
                                          Compact
  Micro     Status Agent
Technologies
• .ΝΕΤ 4, due to Windows XP compatibility
• Visual Studio 2012 + Async Targeting Pack
• UI - Caliburn.Micro
• Concurrency - TPL, Parallel, Dataflow
• Network – HttpClient
• Hashing - OpenSSL – Faster than native provider for hashing
• Storage - NHibernate, SQLite/SQL Server Compact
• Logging - log4net
The challenges
• Handle potentially hundrends of file events
• Hashing of many/large files
• Multiple slow calls to the server
• Unreliable network
• And yet it shouldn’t hang
• Update the UI with enough information
Events Handling
• Use producer/consumer pattern
• Store events in ConcurrentQueue
• Process ONLY after idle timeout
Merkle Hashing
• Why I hate Game of Thrones


• Asynchronous reading of blocks
• Parallel Hashing of each block
• Use of OpenSSL for its SSE support
• Concurrency Throttling
• Beware of memory consumption!
Multiple slow calls

• Each call a task
• Concurrent REST calls per account and share
• Task.WhenAll to process results
Unreliable network

• Use System.Net.Http.HttpClient
• Store blocks in a cache folder
• Check and reuse orphans
• Asynchronous Retry of calls
Resilience to crashes
• Use Transactional NTFS if available
     Thanks MS for killing it!

• Update a copy and File.Replace otherwise
Should not hang
• Use of independent agents
• Asynchronous operations wherever possible
Provide Sufficient user feedback
• Use WPF, MVVM
• Use Progress to update the UI
Next Steps
• Create Windows 8 Dekstop and WinRT client
• Use Reactive Framework


    ΖΗΤΟΥΝΤΑΘ ΕΘΕΛΟΝΤΕΣ
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Clever Tricks
• Avoid Side Effects
• Use Functional Style
• Clean Coding
• THE BIG SECRET:
     Use existing, tested algorithms

• IEEE, ACM Journals and libraries
YES TPL
• Simplify asynchronous or parallel code
• Use out-of-the-box libraries
• Scenarios that SUIT Task or Data Parallelism
NO TPL
• To accelerate “bad” algorithms
• To “accelerate” database access
     Use proper SQL and Indexes!
     Avoid Cursors

• Reporting DBs, Data Warehouse, OLAP Cubes
When TPL is not enough
• Functional languages like F#, Scala
• Distributed Frameworks like Hadoop, {m}brace
Books
• C# 5 in a Nutshell, O’Riley
• Parallel Programming with .NET, Microsoft
• Pro Parallel Programming with C#, Wiley
• Concurrent Programming on Windows, Pearson
• The Art of Concurrency, O’Reilly
Useful Links
• Parallel FX Team:
  http://blogs.msdn.com/b/pfxteam/
• ΙΕΕΕ Computer Society
  http://www.computer.org
• ACM http://www.acm.org
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Ad

More Related Content

What's hot (17)

JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScriptJS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JSFestUA
 
Cooking a rabbit pie
Cooking a rabbit pieCooking a rabbit pie
Cooking a rabbit pie
Tomas Doran
 
Combining the strength of erlang and Ruby
Combining the strength of erlang and RubyCombining the strength of erlang and Ruby
Combining the strength of erlang and Ruby
Martin Rehfeld
 
Scaling with Symfony - PHP UK
Scaling with Symfony - PHP UKScaling with Symfony - PHP UK
Scaling with Symfony - PHP UK
Ricard Clau
 
Erlang factory 2011 london
Erlang factory 2011 londonErlang factory 2011 london
Erlang factory 2011 london
Paolo Negri
 
Webinar: Queues with RabbitMQ - Lorna Mitchell
Webinar: Queues with RabbitMQ - Lorna MitchellWebinar: Queues with RabbitMQ - Lorna Mitchell
Webinar: Queues with RabbitMQ - Lorna Mitchell
Codemotion
 
Flink Forward SF 2017: Tzu-Li (Gordon) Tai - Joining the Scurry of Squirrels...
Flink Forward SF 2017: Tzu-Li (Gordon) Tai -  Joining the Scurry of Squirrels...Flink Forward SF 2017: Tzu-Li (Gordon) Tai -  Joining the Scurry of Squirrels...
Flink Forward SF 2017: Tzu-Li (Gordon) Tai - Joining the Scurry of Squirrels...
Flink Forward
 
Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015
Ricard Clau
 
Using Apache Camel as AKKA
Using Apache Camel as AKKAUsing Apache Camel as AKKA
Using Apache Camel as AKKA
Johan Edstrom
 
Innovating faster with SBT, Continuous Delivery, and LXC
Innovating faster with SBT, Continuous Delivery, and LXCInnovating faster with SBT, Continuous Delivery, and LXC
Innovating faster with SBT, Continuous Delivery, and LXC
kscaldef
 
AppScale Talk at SBonRails
AppScale Talk at SBonRailsAppScale Talk at SBonRails
AppScale Talk at SBonRails
Chris Bunch
 
Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"
Paolo Negri
 
Building Asynchronous Applications
Building Asynchronous ApplicationsBuilding Asynchronous Applications
Building Asynchronous Applications
Johan Edstrom
 
Scaling High Traffic Web Applications
Scaling High Traffic Web ApplicationsScaling High Traffic Web Applications
Scaling High Traffic Web Applications
Achievers Tech
 
webservers
webserverswebservers
webservers
Ewere Diagboya
 
Profiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty DetailsProfiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty Details
Achievers Tech
 
Big Data! Great! Now What? #SymfonyCon 2014
Big Data! Great! Now What? #SymfonyCon 2014Big Data! Great! Now What? #SymfonyCon 2014
Big Data! Great! Now What? #SymfonyCon 2014
Ricard Clau
 
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScriptJS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JS Fest 2019. Александр Хотемский. Способы распараллеливания тестов в JavaScript
JSFestUA
 
Cooking a rabbit pie
Cooking a rabbit pieCooking a rabbit pie
Cooking a rabbit pie
Tomas Doran
 
Combining the strength of erlang and Ruby
Combining the strength of erlang and RubyCombining the strength of erlang and Ruby
Combining the strength of erlang and Ruby
Martin Rehfeld
 
Scaling with Symfony - PHP UK
Scaling with Symfony - PHP UKScaling with Symfony - PHP UK
Scaling with Symfony - PHP UK
Ricard Clau
 
Erlang factory 2011 london
Erlang factory 2011 londonErlang factory 2011 london
Erlang factory 2011 london
Paolo Negri
 
Webinar: Queues with RabbitMQ - Lorna Mitchell
Webinar: Queues with RabbitMQ - Lorna MitchellWebinar: Queues with RabbitMQ - Lorna Mitchell
Webinar: Queues with RabbitMQ - Lorna Mitchell
Codemotion
 
Flink Forward SF 2017: Tzu-Li (Gordon) Tai - Joining the Scurry of Squirrels...
Flink Forward SF 2017: Tzu-Li (Gordon) Tai -  Joining the Scurry of Squirrels...Flink Forward SF 2017: Tzu-Li (Gordon) Tai -  Joining the Scurry of Squirrels...
Flink Forward SF 2017: Tzu-Li (Gordon) Tai - Joining the Scurry of Squirrels...
Flink Forward
 
Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015
Ricard Clau
 
Using Apache Camel as AKKA
Using Apache Camel as AKKAUsing Apache Camel as AKKA
Using Apache Camel as AKKA
Johan Edstrom
 
Innovating faster with SBT, Continuous Delivery, and LXC
Innovating faster with SBT, Continuous Delivery, and LXCInnovating faster with SBT, Continuous Delivery, and LXC
Innovating faster with SBT, Continuous Delivery, and LXC
kscaldef
 
AppScale Talk at SBonRails
AppScale Talk at SBonRailsAppScale Talk at SBonRails
AppScale Talk at SBonRails
Chris Bunch
 
Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"Erlang factory SF 2011 "Erlang and the big switch in social games"
Erlang factory SF 2011 "Erlang and the big switch in social games"
Paolo Negri
 
Building Asynchronous Applications
Building Asynchronous ApplicationsBuilding Asynchronous Applications
Building Asynchronous Applications
Johan Edstrom
 
Scaling High Traffic Web Applications
Scaling High Traffic Web ApplicationsScaling High Traffic Web Applications
Scaling High Traffic Web Applications
Achievers Tech
 
Profiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty DetailsProfiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty Details
Achievers Tech
 
Big Data! Great! Now What? #SymfonyCon 2014
Big Data! Great! Now What? #SymfonyCon 2014Big Data! Great! Now What? #SymfonyCon 2014
Big Data! Great! Now What? #SymfonyCon 2014
Ricard Clau
 

Similar to Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek) (20)

Background processing with hangfire
Background processing with hangfireBackground processing with hangfire
Background processing with hangfire
Aleksandar Bozinovski
 
CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011
Graham Weldon
 
I see deadlocks : Matt Ellis - Techorama NL 2024
I see deadlocks : Matt Ellis - Techorama NL 2024I see deadlocks : Matt Ellis - Techorama NL 2024
I see deadlocks : Matt Ellis - Techorama NL 2024
citizenmatt
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
LLC NewLink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Taming the resource tiger
Taming the resource tigerTaming the resource tiger
Taming the resource tiger
Elizabeth Smith
 
Taming the resource tiger
Taming the resource tigerTaming the resource tiger
Taming the resource tiger
Elizabeth Smith
 
Data Pipelines with Python - NWA TechFest 2017
Data Pipelines with Python - NWA TechFest 2017Data Pipelines with Python - NWA TechFest 2017
Data Pipelines with Python - NWA TechFest 2017
Casey Kinsey
 
SOA with PHP and Symfony
SOA with PHP and SymfonySOA with PHP and Symfony
SOA with PHP and Symfony
MichalSchroeder
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
Jurriaan Persyn
 
C# Async/Await Explained
C# Async/Await ExplainedC# Async/Await Explained
C# Async/Await Explained
Jeremy Likness
 
Scalable game-servers-tgc
Scalable game-servers-tgcScalable game-servers-tgc
Scalable game-servers-tgc
Ashkan Saeedi Mazdeh
 
High Performance Drupal
High Performance DrupalHigh Performance Drupal
High Performance Drupal
Chapter Three
 
Scaling tappsi
Scaling tappsiScaling tappsi
Scaling tappsi
Óscar Andrés López
 
Drupal performance
Drupal performanceDrupal performance
Drupal performance
Piyuesh Kumar
 
Realtime traffic analyser
Realtime traffic analyserRealtime traffic analyser
Realtime traffic analyser
Alex Moskvin
 
Building Big Data Streaming Architectures
Building Big Data Streaming ArchitecturesBuilding Big Data Streaming Architectures
Building Big Data Streaming Architectures
David Martínez Rego
 
CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011
Graham Weldon
 
I see deadlocks : Matt Ellis - Techorama NL 2024
I see deadlocks : Matt Ellis - Techorama NL 2024I see deadlocks : Matt Ellis - Techorama NL 2024
I see deadlocks : Matt Ellis - Techorama NL 2024
citizenmatt
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
LLC NewLink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640Xen and-the-art-of-rails-deployment2640
Xen and-the-art-of-rails-deployment2640
Newlink
 
Taming the resource tiger
Taming the resource tigerTaming the resource tiger
Taming the resource tiger
Elizabeth Smith
 
Taming the resource tiger
Taming the resource tigerTaming the resource tiger
Taming the resource tiger
Elizabeth Smith
 
Data Pipelines with Python - NWA TechFest 2017
Data Pipelines with Python - NWA TechFest 2017Data Pipelines with Python - NWA TechFest 2017
Data Pipelines with Python - NWA TechFest 2017
Casey Kinsey
 
SOA with PHP and Symfony
SOA with PHP and SymfonySOA with PHP and Symfony
SOA with PHP and Symfony
MichalSchroeder
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
Jurriaan Persyn
 
C# Async/Await Explained
C# Async/Await ExplainedC# Async/Await Explained
C# Async/Await Explained
Jeremy Likness
 
High Performance Drupal
High Performance DrupalHigh Performance Drupal
High Performance Drupal
Chapter Three
 
Realtime traffic analyser
Realtime traffic analyserRealtime traffic analyser
Realtime traffic analyser
Alex Moskvin
 
Building Big Data Streaming Architectures
Building Big Data Streaming ArchitecturesBuilding Big Data Streaming Architectures
Building Big Data Streaming Architectures
David Martínez Rego
 
Ad

More from Panagiotis Kanavos (9)

77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
Panagiotis Kanavos
 
65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programming65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programming
Panagiotis Kanavos
 
Περατζάδα στο Azure Event Hub
Περατζάδα στο Azure Event HubΠερατζάδα στο Azure Event Hub
Περατζάδα στο Azure Event Hub
Panagiotis Kanavos
 
Ο βασιλιάς Git!
Ο βασιλιάς Git!Ο βασιλιάς Git!
Ο βασιλιάς Git!
Panagiotis Kanavos
 
Το Azure δεν είναι χορτοφάγο! - 59ο DotNetZone Event
Το Azure δεν είναι χορτοφάγο! - 59ο DotNetZone EventΤο Azure δεν είναι χορτοφάγο! - 59ο DotNetZone Event
Το Azure δεν είναι χορτοφάγο! - 59ο DotNetZone Event
Panagiotis Kanavos
 
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
Panagiotis Kanavos
 
Pithos - Architecture and .NET Technologies
Pithos - Architecture and .NET TechnologiesPithos - Architecture and .NET Technologies
Pithos - Architecture and .NET Technologies
Panagiotis Kanavos
 
Πίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NETΠίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NET
Panagiotis Kanavos
 
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Panagiotis Kanavos
 
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
Panagiotis Kanavos
 
65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programming65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programming
Panagiotis Kanavos
 
Περατζάδα στο Azure Event Hub
Περατζάδα στο Azure Event HubΠερατζάδα στο Azure Event Hub
Περατζάδα στο Azure Event Hub
Panagiotis Kanavos
 
Το Azure δεν είναι χορτοφάγο! - 59ο DotNetZone Event
Το Azure δεν είναι χορτοφάγο! - 59ο DotNetZone EventΤο Azure δεν είναι χορτοφάγο! - 59ο DotNetZone Event
Το Azure δεν είναι χορτοφάγο! - 59ο DotNetZone Event
Panagiotis Kanavos
 
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
Panagiotis Kanavos
 
Pithos - Architecture and .NET Technologies
Pithos - Architecture and .NET TechnologiesPithos - Architecture and .NET Technologies
Pithos - Architecture and .NET Technologies
Panagiotis Kanavos
 
Πίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NETΠίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NET
Panagiotis Kanavos
 
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Panagiotis Kanavos
 
Ad

Recently uploaded (20)

Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
"PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System""PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System"
Jainul Musani
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Rock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning JourneyRock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning Journey
Lynda Kane
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
"PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System""PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System"
Jainul Musani
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Rock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning JourneyRock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning Journey
Lynda Kane
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 

Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)

  • 2. Parallel and Asynchronous Programming Or how we built a Dropbox clone without a PhD in Astrophysics Panagiotis Kanavos DotNetZone Moderator [email protected]
  • 3. Why • Processors are getting smaller • Networks are getting worse • Operating Systems demand it • Only a subset of the code can run in parallel
  • 4. Processors are getting smaller • Once, a single-thread process could use 100% of the CPU • 16% ΜΑΧ ona Quad core LAPTOP with HyperThreading • 8% ΜΑΧ on an 8 core server
  • 5. What we used to have • Hand-coded threads and synchronization • BackgroundWorker  Heavy, cumbersome, single threaded, inadequate progress reporting • EAP: From event to event  Complicated, loss of continuity • APM: BeginXXX/EndXXX  Cumbersome, imagine socket programming with Begin/End! or rather ...
  • 6. Why I stopped blogging • Asynchronous Pipes with APM
  • 7. The problem with threads • Collisions  Reduced throughput  Deadlocks • Solution: Limit the number of threads  ThreadPools  Extreme: Stackless Python  Copy data instead of shared access  Extreme: Immutable programming
  • 8. Why should I care about threads? • How can I speed-up my algorithm? • Which parts can run in parallel? • How can I partition my data?
  • 9. Example Revani
  • 10. Synchronous Revani • Beat the yolks with 2/3 of sugar until fluffy • Beat the whites with 1/3 of sugar to stiff meringue • and add half the mixture to the yolk mixture. • Mix semolina with flour and ground coconut , • add rest of meringue and mix • Mix and pour in cake pan • Bake in pre-heated oven at 170οC for 20-25 mins. • Allow to cool • Prepare syrup, boil water, sugar, lemon for 3 mins. • Pour warm syrup over revani • Sprinkle with ground coconut.
  • 11. Parallel Revani • Beat yolks • Beat Whites • Add half mixture • Mix semolina • Add rest of meringue • Mix • Pour in cake pan • Bake • Prepare syrup • Pour syrup • Sprinkle
  • 12. What we have now • Support for multiple concurrency scenarios • Overall improvements in threading • Highly Concurrent collections
  • 13. Scenaria • Faster processing of large data • Number crunching • Execute long operations • Serve high volume of requests • Social Sites, Web sites, Billing, Log aggregators • Tasks with frequent blocking • REST clients, IT management apps
  • 14. Scenario Classification • Data Parallelism • Task Parallelism • Asynchronous programming • Agents/Actors • Dataflows
  • 15. Data Parallelism – Recipe • Partition the data • Implement the algorithm in a function • TPL creates the necessary tasks • The tasks are assigned to threads • I DON’T’T have to define the number of Tasks/Threads!
  • 16. Data Parallelism - Tools • Parallel.For / Parallel.ForEach • PLINQ • Partitioners
  • 17. Parallel class Methods • Parallel execution of lambdas • Blocking calls! • We specify  Cancellation Token  Maximum number of Threads  Task Scheduler
  • 18. PLINQ • LINQ Queries • Potentially multiple threads • Parallel operators • Unordered results • Beware of races List<int> list = new List<int>(); var q = src.AsParallel() .Select(x => { list.Add(x); return x; }) .Where(x => true) .Take(100);
  • 19. What it can’t do • Doesn’t use SSE instructions • Doesn’t use the GPU • Isn’t using the CPU at 100%
  • 21. Scenaria • Data Parallelism • Task Parallelism • Asynchronous programming • Agents/Actors • Dataflows
  • 22. Task Parellelism – Recipe • Break the problem into steps • Convert each step to a function • Combine steps with Continuations • TPL assigns tasks to threads as needed • I DON’T have to define number of Tasks/Threads! • Cancellation of the entire task chain
  • 23. The Improvements • Tasks wherever code blocks • Cancellation • Lazy Initialization • Progress Reporting • Synchronization Contexts
  • 24. Cancellation • Problem: How do you cancel multiple tasks without leaving trash behind? • Solution: Everyone monitors a CancellationToken  TPL cancels subsequent Tasks or Parallel operations  Created by a CancellationTokenSource  Can execute code when Cancel is called
  • 25. Progress Reporting • Problem: How do you update the UI from inside a task? • Solution: Using an IProgress<T> object  Out-of-the-Box Progress<T> updates the current Synch Context  Any type can be a message  Replace with our own implementation
  • 26. Lazy Initialization • Calculate a value only when needed • Lazy<T>(Func<T> …) • Synchronous or Asynchronous calculation  Lazy.Value  Lazy.GetValueAsync<T>()
  • 27. Synchronization Context • Since .NET 2.0! • Hides Winforms, WPF, ASP.NET  SynchronizationContext.Post/Send instead of Dispatcher.Invoke etc  Synchronous and Asynchronous version • Automatically created by the environment  SynchronizationContext.Current • Can create our own  E.g. For a Command Line aplication
  • 28. Scenaria • Data Parallelism • Task Parallelism • Asynchronous programming • Agents/Actors • Dataflows
  • 29. Async/Await • Support at the language leve • Debugging support • Exception Handling • After await return to original “thread”  Beware of servers and libraries • Dos NOT always execute asynchronously  Only when a task is encountered or the thread yields  Task.Yield
  • 30. Asynchronous Retry private static async Task<T> Retry<T>(Func<T> func, int retryCount) { while (true) { try { var result = await Task.Run(func); return result; } catch { If (retryCount == 0) throw; retryCount--; } } }
  • 32. More Goodies - Collections • Highly concurrent • Thread-safe • Not only for TPL/PLINQ • Producer/Consumer scenaria
  • 33. Concurrent Collections - 2 • ConcurrentQueue • ConcurrentStack • ConcurrentDictionary
  • 34. The Odd one - ConcurrentBag • Duplicates allowed • List per Thread • Reduced collisions for each tread’s Add/Take • BAD for Producer/Consumer
  • 35. Concurrent Collections - Gotchas • NOT faster than plain collections in low concurrency scenarios • DO NOT consume less memory • DO NOT provide thread safe enumeration • DO NOT ensure atomic operations on content • DO NOT fix unsafe code
  • 36. Also in .NET 4 • Visual Studio 2012 • Async Targeting package • System.Net.HttpClient package
  • 37. Other Technologies • F# async • C++ Parallel Patterns Library • C++ Concurrency Runtime • C++ Agents • C++ AMP
  • 38. • Object storage similar to Amazon S3/Azure Blob storage • A Service of Synnefo – IaaS by GRNet • Written in Python • Clients for Web, Windows, iOS, Android, Linux • Versioning, Permissions, Sharing
  • 40. Pithos API • REST API base on CloudFiles by Rackspace  Compatible with CyberDuck etc • Block storage • Uploads only using blocks • Uses Merkle Hashing
  • 41. Pithos Client for Windows • Multiple accounts per machine • Synchronize local folder to a Pithos account • Detect local changes and upload • Detect server changes and download • Calculate Merkle Hash for each file
  • 42. The Architecture UI Core Networking Storage File Agent WPF CloudFiles SQLite Poll Agent MVVM Network Agent SQL Server Caliburn HttpClient Compact Micro Status Agent
  • 43. Technologies • .ΝΕΤ 4, due to Windows XP compatibility • Visual Studio 2012 + Async Targeting Pack • UI - Caliburn.Micro • Concurrency - TPL, Parallel, Dataflow • Network – HttpClient • Hashing - OpenSSL – Faster than native provider for hashing • Storage - NHibernate, SQLite/SQL Server Compact • Logging - log4net
  • 44. The challenges • Handle potentially hundrends of file events • Hashing of many/large files • Multiple slow calls to the server • Unreliable network • And yet it shouldn’t hang • Update the UI with enough information
  • 45. Events Handling • Use producer/consumer pattern • Store events in ConcurrentQueue • Process ONLY after idle timeout
  • 46. Merkle Hashing • Why I hate Game of Thrones • Asynchronous reading of blocks • Parallel Hashing of each block • Use of OpenSSL for its SSE support • Concurrency Throttling • Beware of memory consumption!
  • 47. Multiple slow calls • Each call a task • Concurrent REST calls per account and share • Task.WhenAll to process results
  • 48. Unreliable network • Use System.Net.Http.HttpClient • Store blocks in a cache folder • Check and reuse orphans • Asynchronous Retry of calls
  • 49. Resilience to crashes • Use Transactional NTFS if available  Thanks MS for killing it! • Update a copy and File.Replace otherwise
  • 50. Should not hang • Use of independent agents • Asynchronous operations wherever possible
  • 51. Provide Sufficient user feedback • Use WPF, MVVM • Use Progress to update the UI
  • 52. Next Steps • Create Windows 8 Dekstop and WinRT client • Use Reactive Framework ΖΗΤΟΥΝΤΑΘ ΕΘΕΛΟΝΤΕΣ
  • 54. Clever Tricks • Avoid Side Effects • Use Functional Style • Clean Coding • THE BIG SECRET:  Use existing, tested algorithms • IEEE, ACM Journals and libraries
  • 55. YES TPL • Simplify asynchronous or parallel code • Use out-of-the-box libraries • Scenarios that SUIT Task or Data Parallelism
  • 56. NO TPL • To accelerate “bad” algorithms • To “accelerate” database access  Use proper SQL and Indexes!  Avoid Cursors • Reporting DBs, Data Warehouse, OLAP Cubes
  • 57. When TPL is not enough • Functional languages like F#, Scala • Distributed Frameworks like Hadoop, {m}brace
  • 58. Books • C# 5 in a Nutshell, O’Riley • Parallel Programming with .NET, Microsoft • Pro Parallel Programming with C#, Wiley • Concurrent Programming on Windows, Pearson • The Art of Concurrency, O’Reilly
  • 59. Useful Links • Parallel FX Team: http://blogs.msdn.com/b/pfxteam/ • ΙΕΕΕ Computer Society http://www.computer.org • ACM http://www.acm.org