Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)

Preview:

Citation preview

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

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

Υξήζηκα 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

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

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

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

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

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

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

γξακκαηεία.

Recommended