Καθημερινές τρήσεις τοσ Task Parallel Library Παλαγηώηεο Καλαβόο DotNetZone
Καθημερινές τρήσεις τοσ
Task Parallel LibraryΠαλαγηώηεο Καλαβόο
DotNetZone
Ση είλαη
• Βηβιηνζήθε γηα Task Parallelism
• LINQ Provider γηα Data Processing
Γηαηί?
• Οη επεμεξγαζηέο κηθξαίλνπλ
• Οη απαηηήζεηο ησλ ρξεζηώλ απμάλνληαη
• Σα αηηήκαηα απμάλνληαη
• Ζ πνιππινθόηεηα ηνπ θώδηθα απμάλεηαη
• Σα κπινθαξίζκαηα απμάλνληαη
Γηαηί όρη ...
• Απεπζείαο Threads ?
• Background Worker?
• ThreadPool.QueueUserWorkItem ?
ελάξηα
• Σαρύηεξε επεμεξγαζία ελόο όγθνπ δεδνκέλσλ
– Number crunching
• Δθηέιεζε καθξνρξόλησλ εξγαζηώλ
• Δμππεξέηεζε κέγηζηνπ αξηζκνύ αηηεκάησλ
– Social Sites, Web sites, Billing, Log aggregators
• Δξγαζίεο κε ζπρλά κπινθαξίζκαηα
– REST clients, IT management apps
Πσο αληηκεησπίδνληαη - 1?
• Task Parallelism
– πάσ ην πξόβιεκα ζε βήκαηα
– Μεηαηξέπσ θάζε βήκα ζε function
– πλδέσ ηα βήκαηα κε Continuations
• Σν TPL αλαζέηεη ηα tasks ζε threads όπσο
ρξεηάδεηαη
• ΓΔΝ ρξεηάδεηαη λα νξίζσ αξηζκό Task ή
Thread!
Πώο αληηκεησπίδνληαη – 2?
• Data Parallelism
– πάσ ηα δεδνκέλα ζε ηκήκαηα
– Οξίδσ ηνλ αιγόξηζκν ζε έλα function
• To TPL δεκηνπξγεί ηα απαξαίηεηα tasks
• Σα tasks αλαηίζεληαη ζε threads
• ΓΔΝ ρξεηάδεηαη λα νξίζσ αξηζκό Task ή
Thread!
Παξάδεηγκα
Ραβαλί
ύγρξνλν Ραβαλί
• Υηππάκε ηνπο θξόθνπο κε ηα 2/3 ηεο δάραξεο κέρξη λα αθξαηέςνπλ
• Υηππάκε ηα αζπξάδηα κε ην 1/3 ηεο δάραξεο ζε ζθηθηή καξέγθα
• θαη πξνζζέηνπκε ην κηζό κείγκα ζην κείγκα κε ηνπο θξόθνπο.
• Ρίρλνπκε ην ζηκηγδάιη κε ην αιεύξη θαη ηελ θαξύδα,
• πξνζζέηνπκε ηε ππόινηπε καξέγθα θαη αλαθαηεύνπκε
• Αλαθαηεύνπκε θαη ηνπνζεηνύκε ζε κηα θόξκα
• Φήλνπκε ζε πξνζεξκαζκέλν θνύξλν ζηνπο 170νC γηα 20-25 ιεπηά.
• Αυήνοσμε να κρσώσει
• Δηνηκάδνπκε ην ζηξόπη, βξάδνληαο λεξό, δάραξε, ιεκόλη γηα 3 ιεπηά.
• Πεξηρύλνπκε ην ξαβαλί κε ην ζηξόπη δεζηό
• Παζπαιίδνπκε κε ηλδηθή θαξύδα.
Παξάιιειν Ραβαλί
• Υηππάκε ηνπο θξόθνπο • Υηππάκε ηα αζπξάδηα
• Πξνζζέηνπκε ην κηζό κείγκα
• Ρίρλνπκε ην ζπκηγδάιη
• Πξνζζέηνπκε ηελ ππόινηπε καξέγθα
• Αλαθαηεύνπκε
• Ρίρλνπκε ζηε θόξκα
• Πεξηρύλνπκε
• Παζπαιίδνπκε
• Φήλνπκε • Δηνηκάδνπκε ην ζηξόπη
Βαζηθέο Έλλνηεο Tasks
• Tasks
• Continuations
• Task Schedulers – Οη δηθνί καο Allocators
• Concurrent Collections
• Δύθνια Thread Local Variables
Βαζηθέο Έλλνηεο Parallel LINQ
• LINQ queries
• Partitioners
• Καηάιιειν γηα In-Memory processing
• Βνιηθό όηαλ βαξηόκαζηε ηα Tasks
Σερληθέο
• Parallel.For ή PLINQ
• Recursion
• Producer/Consumer
• Pipelines
• Task Iterators θαη Async CTP
• Job Queues
• Agents
Parallel.For/Parallel.ForEach
• Data Parallelism
• Μπνξνύκε λα νξίζνπκε
– Μέγηζην αξηζκό threads
– CancellationToken
– TaskScheduler
Παξάδεηγκα
Γεκηνπξγία ThumbnailsΜία ηδέα από ην Faking It, IEEE Software, Sep 2011
ηνπ Γηνκήδε πηλέιιε
PLINQ
• LINQ queries
• Potentially, multiple threads per item
• Πξνζνρή ζε racesList<int> list = new List<int>();
var q = src.AsParallel()
.Select(x => { list.Add(x); return x; })
.Where(x => true) .Take(100);
Recursion
• Ξεθηλάκε ην επόκελν βήκα πξηλ
επεμεξγαζηνύκε ην ηξέρνλ
• Φνβεξή δηεπθόιπλζε ηα lambdas
• Πεξηνξηζκόο ηεο πεξηπινθόηεηαο
Producer/Consumer
• Ξερσξίδνπκε ηνλ θώδηθα πνπ δεκηνπξγεί
input θαη output
• Δπθνιόηεξν synchronization
• Υάλεηαη ην call stack
Pipelines
• Κάζε βήκα εθηειείηαη μερσξηζηά
• ύλδεζε κέζσ concurrent collections
• Δπόκελν βήκα – DataFlow
Job Queues
• Λίζηα από Jobs
• Βνιηθόηαην γηα throttling
– SQLite writes
Agents
• Κόιπν από F#, Scala
• Αληαιιαγή κελπκάησλ
Έμπλπα Σξπθ
• Απνθπγή Side Effects
• Υξήζε Functional Style
• Καζαξόο Κώδηθαο
• ΣΟ ΜΔΓΑΛΟ ΚΟΛΠΟ:
• Υξήζε έηνηκσλ, δνθηκαζκέλσλ
αιγνξίζκσλ
– IEEE, ACM Journals θαη βηβιηνζήθεο
ΝΑΗ TPL
• Απινπνίεζε παξάιιεινπ ή αζύγρξνλνπ
θώδηθα
• Υξήζε έηνηκσλ βηβιηνζεθώλ
• ελάξηα πνπ ΣΑΗΡΗΑΕΟΤΝ ζην Task ή ην
Data Parallelism
ΟΥΗ TPL
• Όηαλ θόβνπκε κε καληνιίλν
• Γηα λα επηηαρύλνπκε «θαθνύο» αιγόξηζκνπο
• Γηα λα «επηηαρύλνπκε « ηε βάζε δεδνκέλσλ
– σζηή SQL θαη Indexes
– Απνθπγή Cursors
– Reporting DBs, Data Warehouse, OLAP Cubes
Όηαλ δελ θηάλεη ε TPL
• Functional γιώζζεο όπσο F#, Scala
• Distributed Frameworks όπσο Hadoop
Οη ηάζεηο
• Πεξηζζόηεξα requests από ιηγόηεξα threads
– Stackless Python: No blocking calls allowed
• Async Everything!
• Πην functional θώδηθαο
• Υξήζε message passing, agents
• Δμεηδηθεπκέλα Framework θαη DSLs
– Reactive Framework
– R/Parallel
– Hadoop
Βηβιία
• Parallel Programming with .NET, Microsoft
• Pro Parallel Programming with C#, Wiley
• Concurrent Programming on Windows,
Pearson
• The Art of Concurrency, O’Reilly
Υξήζηκα Links
• Parallel FX Team
http://blogs.msdn.com/b/pfxteam/
• ΗΔΔΔ Computer Society http://www.computer.org
• ACM http://www.acm.org
ρεηηθέο Παξνπζηάζεηο
• DEV11 – Async CTP: Say Goodbye to CallbacksΜαλώιεο Κειατδίηεο
• DEV18 – All About Reactive Extensions
Άγγεινο Μπηκπνύδεο
• DEV13 – Lambda The Ultimate
Νίθνο Παιιαδηλόο
Αμηνιόγεζε παξνπζηάζεσλ
• Πείηε καο ηελ γλώκε ζαο θαη κπείηε
ζηελ θιήξσζε γηα ηα δώξα καο.
• πκπιεξώζηε ην έληππν
αμηνιόγεζεο θαη παξαδώζηε ην ζηελ
γξακκαηεία.