230 likes | 373 Vues
Dive into the world of high-level multithreaded programming with Primož Gabrijelčič as your guide. Learn about the OmniThreadLibrary, an open-source VCL for multithreading in Delphi, that simplifies the complexities of writing concurrent applications. Discover key abstractions such as ParallelTask, BackgroundWorker, and more, designed to improve performance and responsiveness. Whether you're a programmer, consultant, or enthusiast, gain insights on installation, documentation, and best practices for working with multithreaded code, along with links to webinars and valuable resources.
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