230 likes | 359 Views
High-level Multithreaded Programming [Part I]. Primo ž Gabrijelčič. Background Information. About Me. Primo ž Gabrijelčič Programmer, consultant, writer, speaker thedelphigeek.com www.glagolite.si/delphi Working with Delphi since Delphi 1 Hacking multithreaded code since 1999.
E N D
High-level Multithreaded Programming [Part I] Primož Gabrijelčič
About Me • Primož Gabrijelčič • Programmer, consultant, writer, speaker • thedelphigeek.com • www.glagolite.si/delphi • Working with Delphi since Delphi 1 • 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, bundles! • 20 free books, courtesy of the De Novo Software, www.denovosoftware.com
Installation • Download the installation package from the Google Code or checkout the SVN repository • Add installation folder and its src subfolder to the project search path or Win32/64 library path • Add the OtlParallel unit to the uses list
Documentation • Blog tutorials • “The book” • Presentations • Forum • Google+: OmniThreadLibrary • @TheDelphiGeek: #omnithreadlibrary www.omnithreadlibrary.com
Why Multithreading? • Improve performance • Improve responsiveness
Why? • Designing parallel solutions is hard • Writing multithreaded code is hard • Testing multithreaded applications is hard • Debugging multithreaded code is pure …
OTL to the Rescue! • Well-tested components … • packed in reusable classes … • with high-level parallel programming support.
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach
Which abstraction to use? • Consider data flow!
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach Start background task and continue
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach • Start background calculation and retrieve the result
High-Level Abstractions • ParallelTask • BackgroundWorker • ForkJoin • Pipeline • Async [/Await] • Future • Join • ForEach • Start multiple background tasks [and wait]
Keep in Mind • Don’t parallelize everything • Rethink the algorithm • Data flow dictates the abstraction • Measure the improvements • Test, test and test
Code and Video www.omnithreadlibrary.com/webinars