190 likes | 278 Views
High-level Multithreaded Programming [Part II]. Primo ž Gabrijelčič. Background Information. About Me. Primo ž Gabrijelčič Programmer, consultant, writer, speaker thedelphigeek.com www.glagolite.si/delphi Hacking multithreaded code since 1999. About OmniThreadLibrary.
E N D
High-level Multithreaded Programming [Part II] Primož Gabrijelčič
About Me • Primož Gabrijelčič • Programmer, consultant, writer, speaker • thedelphigeek.com • www.glagolite.si/delphi • Hacking multithreaded code since 1999
About OmniThreadLibrary • „VCL for multithreading“ • Delphi 2007 – XE3[4] • Open source – OpenBSD license • www.omnithreadlibrary.com • omnithreadlibrary.googlecode.com • Win32/Win64
About the Webinars • Code and video: www.omnithreadlibrary.com/webinars • Code = free, video = $10 • 20 free books, courtesy of the De Novo Software, www.denovosoftware.com
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach • Start multiple background tasks [and wait]
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach Start multiple copies of a single task
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach • Background request-processing service
BackgroundWorker Usage • service := Paralell.BackgroundWorker.OnRequestDone(code1).Execute(code2); • workItem := service.CreateWorkItem(data); • service.Schedule(workItem) • service.Terminate; service := nil;
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach • Divide and conquer
Fork/Join Usage • computation := Parallel.ForkJoin; • compute1 := computation.Compute(action); • Inside action: computation.Compute(newAction) • compute2 := computation.Compute(action); • compute1.Value / compute1.Await • compute2.Value / compute2.Await
Keep in Mind • Don’t parallelize everything • Rethink the algorithm • Data flow dictates the abstraction • Measure the improvements • Test, test and test
Code & Video • Will be available shortly at www.omnithreadlibrary.com/webinars