Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English)
Upcoming SlideShare
Loading in...5
×
 

Parallel and Asynchronous Programming - ITProDevConnections 2012 (English)

on

  • 550 views

An overview of the Task Parallel Library and its use in the Pithos for Windows client, including a recipe of Parallel Revani

An overview of the Task Parallel Library and its use in the Pithos for Windows client, including a recipe of Parallel Revani

Statistics

Views

Total Views
550
Views on SlideShare
539
Embed Views
11

Actions

Likes
0
Downloads
2
Comments
0

2 Embeds 11

https://twitter.com 10
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English) Parallel and Asynchronous Programming - ITProDevConnections 2012 (English) Presentation Transcript

  • Parallel andAsynchronousProgrammingOr how we buitl a Dropbox clone without aPhD in AstrophysicsPanagiotis KanavosDotNetZone Moderatorpkanavos@gmail.com
  • • Processors are getting smaller• Networks are getting worse• Operating Systems demand it• Only a subset of the code can run in parallelWhy
  • • Once, a single-thread process could use 100%of the CPU• 16% ΜΑΧ ona Quad core LAPTOP withHyperThreading• 8% ΜΑΧ on an 8 core serverProcessors are getting smaller
  • • 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 ...What we used to have
  • • Asynchronous Pipes with APMWhy I stopped blogging
  • • Collisions Reduced throughput Deadlocks• Solution: Limit the number of threads ThreadPools Extreme: Stackless Python Copy data instead of shared access Extreme: Immutable programmingThe problem with threads
  • • How can I speed-up my algorithm?• Which parts can run in parallel?• How can I partition my data?Why should I care aboutthreads?
  • ExampleRevani
  • • 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.Synchronous Revani
  • Parallel Revani• Beat yolks • Beat Whites• Add half mixture• Mix semolina• Add rest of meringue• Mix• Pour in cake pan• Pour syrup• Sprinkle• Bake • Prepare syrup
  • • Support for multiple concurrency scenarios• Overall improvements in threading• Highly Concurrent collectionsWhat we have now
  • 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
  • • Data Parallelism• Task Parallelism• Asynchronous programming• Agents/Actors• DataflowsScenario Classification
  • • 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 ofTasks/Threads!Data Parallelism – Recipe
  • • Parallel.For / Parallel.ForEach• PLINQ• PartitionersData Parallelism - Tools
  • • Parallel execution of lambdas• Blocking calls!• We specify Cancellation Token Maximum number of Threads Task SchedulerParallel class Methods
  • • LINQ Queries• Potentially multiple threads• Parallel operators• Unordered results• Beware of racesList<int> list = new List<int>();var q = src.AsParallel().Select(x => { list.Add(x); return x; }).Where(x => true) .Take(100);PLINQ
  • • Doesn’t use SSE instructions• Doesn’t use the GPU• Isn’t using the CPU at 100%What it can’t do
  • • Data Parallelism• Task Parallelism• Asynchronous programming• Agents/Actors• DataflowsScenaria
  • • 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 ofTasks/Threads!• Cancellation of the entire task chainTask Parellelism – Recipe
  • • Tasks wherever code blocks• Cancellation• Lazy Initialization• Progress Reporting• Synchronization ContextsThe Improvements
  • • Problem: How do you cancel multiple taskswithout leaving trash behind?• Solution: Everyone monitors aCancellationToken TPL cancels subsequent Tasks or Parallel operations Created by a CancellationTokenSource Can execute code when Cancel is calledCancellation
  • • Problem: How do you update the UI from insidea 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 implementationProgress Reporting
  • • Calculate a value only when needed• Lazy<T>(Func<T> …)• Synchronous or Asynchronous calculation Lazy.Value Lazy.GetValueAsync<T>()Lazy Initialization
  • • 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 aplicationSynchronization Context
  • • Data Parallelism• Task Parallelism• Asynchronous programming• Agents/Actors• DataflowsScenaria
  • • 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.YieldAsync/Await
  • 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--;} } }Asynchronous Retry
  • • Highly concurrent• Thread-safe• Not only for TPL/PLINQ• Producer/Consumer scenariaMore Goodies - Collections
  • • ConcurrentQueue• ConcurrentStack• ConcurrentDictionaryConcurrent Collections - 2
  • • Duplicates allowed• List per Thread• Reduced collisions for each tread’s Add/Take• BAD for Producer/ConsumerThe Odd one - ConcurrentBag
  • • NOT faster than plain collections in lowconcurrency scenarios• DO NOT consume less memory• DO NOT provide thread safe enumeration• DO NOT ensure atomic operations on content• DO NOT fix unsafe codeConcurrent Collections -Gotchas
  • • Visual Studio 2012• Async Targeting package• System.Net.HttpClient packageAlso in .NET 4
  • • F# async• C++ Parallel Patterns Library• C++ Concurrency Runtime• C++ Agents• C++ AMPOther Technologies
  • • Object storage similar to Amazon S3/Azure Blobstorage• A Service of Synnefo – IaaS by GRNet• Written in Python• Clients for Web, Windows, iOS, Android, Linux• Versioning, Permissions, Sharing
  • Synnefo
  • • REST API base on CloudFiles by Rackspace Compatible with CyberDuck etc• Block storage• Uploads only using blocks• Uses Merkle HashingPithos API
  • • 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 filePithos Client for Windows
  • The ArchitectureUIWPFMVVMCaliburnMicroCoreFile AgentPoll AgentNetworkAgentStatus AgentNetworkingCloudFilesHttpClientStorageSQLiteSQL ServerCompact
  • • .ΝΕΤ 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 - log4netTechnologies
  • • 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 informationThe challenges
  • • Use producer/consumer pattern• Store events in ConcurrentQueue• Process ONLY after idle timeoutEvents Handling
  • • 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!Merkle Hashing
  • • Each call a task• Concurrent REST calls per account and share• Task.WhenAll to process resultsMultiple slow calls
  • • Use System.Net.Http.HttpClient• Store blocks in a cache folder• Check and reuse orphans• Asynchronous Retry of callsUnreliable network
  • • Use Transactional NTFS if available Thanks MS for killing it!• Update a copy and File.Replace otherwiseResilience to crashes
  • • Use of independent agents• Asynchronous operations wherever possibleShould not hang
  • • Use WPF, MVVM• Use Progress to update the UIProvide Sufficient user feedback
  • • Create Windows 8 Dekstop and WinRT client• Use Reactive FrameworkNext StepsΖΗΤΟΥΝΤΑΘ ΕΘΕΛΟΝΤΕΣ
  • • Avoid Side Effects• Use Functional Style• Clean Coding• THE BIG SECRET: Use existing, tested algorithms• IEEE, ACM Journals and librariesClever Tricks
  • • Simplify asynchronous or parallel code• Use out-of-the-box libraries• Scenarios that SUIT Task or Data ParallelismYES TPL
  • • To accelerate “bad” algorithms• To “accelerate” database access Use proper SQL and Indexes! Avoid Cursors• Reporting DBs, Data Warehouse, OLAP CubesNO TPL
  • • Functional languages like F#, Scala• Distributed Frameworks like Hadoop, {m}braceWhen TPL is not enough
  • • 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’ReillyBooks
  • • Parallel FX Team:http://blogs.msdn.com/b/pfxteam/• ΙΕΕΕ Computer Societyhttp://www.computer.org• ACM http://www.acm.orgUseful Links