30
Καθημερινές τρήσεις τοσ Task Parallel Library Παλαγηώηεο Καλαβόο DotNetZone

Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Embed Size (px)

Citation preview

Page 1: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Καθημερινές τρήσεις τοσ

Task Parallel LibraryΠαλαγηώηεο Καλαβόο

DotNetZone

Page 2: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Ση είλαη

• Βηβιηνζήθε γηα Task Parallelism

• LINQ Provider γηα Data Processing

Page 3: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Γηαηί?

• Οη επεμεξγαζηέο κηθξαίλνπλ

• Οη απαηηήζεηο ησλ ρξεζηώλ απμάλνληαη

• Σα αηηήκαηα απμάλνληαη

• Ζ πνιππινθόηεηα ηνπ θώδηθα απμάλεηαη

• Σα κπινθαξίζκαηα απμάλνληαη

Page 4: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Γηαηί όρη ...

• Απεπζείαο Threads ?

• Background Worker?

• ThreadPool.QueueUserWorkItem ?

Page 5: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

ελάξηα

• Σαρύηεξε επεμεξγαζία ελόο όγθνπ δεδνκέλσλ

– Number crunching

• Δθηέιεζε καθξνρξόλησλ εξγαζηώλ

• Δμππεξέηεζε κέγηζηνπ αξηζκνύ αηηεκάησλ

– Social Sites, Web sites, Billing, Log aggregators

• Δξγαζίεο κε ζπρλά κπινθαξίζκαηα

– REST clients, IT management apps

Page 6: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Πσο αληηκεησπίδνληαη - 1?

• Task Parallelism

– πάσ ην πξόβιεκα ζε βήκαηα

– Μεηαηξέπσ θάζε βήκα ζε function

– πλδέσ ηα βήκαηα κε Continuations

• Σν TPL αλαζέηεη ηα tasks ζε threads όπσο

ρξεηάδεηαη

• ΓΔΝ ρξεηάδεηαη λα νξίζσ αξηζκό Task ή

Thread!

Page 7: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Πώο αληηκεησπίδνληαη – 2?

• Data Parallelism

– πάσ ηα δεδνκέλα ζε ηκήκαηα

– Οξίδσ ηνλ αιγόξηζκν ζε έλα function

• To TPL δεκηνπξγεί ηα απαξαίηεηα tasks

• Σα tasks αλαηίζεληαη ζε threads

• ΓΔΝ ρξεηάδεηαη λα νξίζσ αξηζκό Task ή

Thread!

Page 8: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Παξάδεηγκα

Ραβαλί

Page 9: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

ύγρξνλν Ραβαλί

• Υηππάκε ηνπο θξόθνπο κε ηα 2/3 ηεο δάραξεο κέρξη λα αθξαηέςνπλ

• Υηππάκε ηα αζπξάδηα κε ην 1/3 ηεο δάραξεο ζε ζθηθηή καξέγθα

• θαη πξνζζέηνπκε ην κηζό κείγκα ζην κείγκα κε ηνπο θξόθνπο.

• Ρίρλνπκε ην ζηκηγδάιη κε ην αιεύξη θαη ηελ θαξύδα,

• πξνζζέηνπκε ηε ππόινηπε καξέγθα θαη αλαθαηεύνπκε

• Αλαθαηεύνπκε θαη ηνπνζεηνύκε ζε κηα θόξκα

• Φήλνπκε ζε πξνζεξκαζκέλν θνύξλν ζηνπο 170νC γηα 20-25 ιεπηά.

• Αυήνοσμε να κρσώσει

• Δηνηκάδνπκε ην ζηξόπη, βξάδνληαο λεξό, δάραξε, ιεκόλη γηα 3 ιεπηά.

• Πεξηρύλνπκε ην ξαβαλί κε ην ζηξόπη δεζηό

• Παζπαιίδνπκε κε ηλδηθή θαξύδα.

Page 10: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Παξάιιειν Ραβαλί

• Υηππάκε ηνπο θξόθνπο • Υηππάκε ηα αζπξάδηα

• Πξνζζέηνπκε ην κηζό κείγκα

• Ρίρλνπκε ην ζπκηγδάιη

• Πξνζζέηνπκε ηελ ππόινηπε καξέγθα

• Αλαθαηεύνπκε

• Ρίρλνπκε ζηε θόξκα

• Πεξηρύλνπκε

• Παζπαιίδνπκε

• Φήλνπκε • Δηνηκάδνπκε ην ζηξόπη

Page 11: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Βαζηθέο Έλλνηεο Tasks

• Tasks

• Continuations

• Task Schedulers – Οη δηθνί καο Allocators

• Concurrent Collections

• Δύθνια Thread Local Variables

Page 12: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Βαζηθέο Έλλνηεο Parallel LINQ

• LINQ queries

• Partitioners

• Καηάιιειν γηα In-Memory processing

• Βνιηθό όηαλ βαξηόκαζηε ηα Tasks

Page 13: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Σερληθέο

• Parallel.For ή PLINQ

• Recursion

• Producer/Consumer

• Pipelines

• Task Iterators θαη Async CTP

• Job Queues

• Agents

Page 14: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Parallel.For/Parallel.ForEach

• Data Parallelism

• Μπνξνύκε λα νξίζνπκε

– Μέγηζην αξηζκό threads

– CancellationToken

– TaskScheduler

Page 15: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Παξάδεηγκα

Γεκηνπξγία ThumbnailsΜία ηδέα από ην Faking It, IEEE Software, Sep 2011

ηνπ Γηνκήδε πηλέιιε

Page 16: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

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);

Page 17: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Recursion

• Ξεθηλάκε ην επόκελν βήκα πξηλ

επεμεξγαζηνύκε ην ηξέρνλ

• Φνβεξή δηεπθόιπλζε ηα lambdas

• Πεξηνξηζκόο ηεο πεξηπινθόηεηαο

Page 18: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Producer/Consumer

• Ξερσξίδνπκε ηνλ θώδηθα πνπ δεκηνπξγεί

input θαη output

• Δπθνιόηεξν synchronization

• Υάλεηαη ην call stack

Page 19: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Pipelines

• Κάζε βήκα εθηειείηαη μερσξηζηά

• ύλδεζε κέζσ concurrent collections

• Δπόκελν βήκα – DataFlow

Page 20: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Job Queues

• Λίζηα από Jobs

• Βνιηθόηαην γηα throttling

– SQLite writes

Page 21: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Agents

• Κόιπν από F#, Scala

• Αληαιιαγή κελπκάησλ

Page 22: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Έμπλπα Σξπθ

• Απνθπγή Side Effects

• Υξήζε Functional Style

• Καζαξόο Κώδηθαο

• ΣΟ ΜΔΓΑΛΟ ΚΟΛΠΟ:

• Υξήζε έηνηκσλ, δνθηκαζκέλσλ

αιγνξίζκσλ

– IEEE, ACM Journals θαη βηβιηνζήθεο

Page 23: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

ΝΑΗ TPL

• Απινπνίεζε παξάιιεινπ ή αζύγρξνλνπ

θώδηθα

• Υξήζε έηνηκσλ βηβιηνζεθώλ

• ελάξηα πνπ ΣΑΗΡΗΑΕΟΤΝ ζην Task ή ην

Data Parallelism

Page 24: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

ΟΥΗ TPL

• Όηαλ θόβνπκε κε καληνιίλν

• Γηα λα επηηαρύλνπκε «θαθνύο» αιγόξηζκνπο

• Γηα λα «επηηαρύλνπκε « ηε βάζε δεδνκέλσλ

– σζηή SQL θαη Indexes

– Απνθπγή Cursors

– Reporting DBs, Data Warehouse, OLAP Cubes

Page 25: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Όηαλ δελ θηάλεη ε TPL

• Functional γιώζζεο όπσο F#, Scala

• Distributed Frameworks όπσο Hadoop

Page 26: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Οη ηάζεηο

• Πεξηζζόηεξα requests από ιηγόηεξα threads

– Stackless Python: No blocking calls allowed

• Async Everything!

• Πην functional θώδηθαο

• Υξήζε message passing, agents

• Δμεηδηθεπκέλα Framework θαη DSLs

– Reactive Framework

– R/Parallel

– Hadoop

Page 28: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Υξήζηκα Links

• Parallel FX Team

http://blogs.msdn.com/b/pfxteam/

• ΗΔΔΔ Computer Society http://www.computer.org

• ACM http://www.acm.org

Page 29: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

ρεηηθέο Παξνπζηάζεηο

• DEV11 – Async CTP: Say Goodbye to CallbacksΜαλώιεο Κειατδίηεο

• DEV18 – All About Reactive Extensions

Άγγεινο Μπηκπνύδεο

• DEV13 – Lambda The Ultimate

Νίθνο Παιιαδηλόο

Page 30: Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Αμηνιόγεζε παξνπζηάζεσλ

• Πείηε καο ηελ γλώκε ζαο θαη κπείηε

ζηελ θιήξσζε γηα ηα δώξα καο.

• πκπιεξώζηε ην έληππν

αμηνιόγεζεο θαη παξαδώζηε ην ζηελ

γξακκαηεία.