Parallel Programming with OmniThreadLibrary

The book is also available online.

Articles

High-level multithreading

If you are new to multithreading and use at least Delphi 2009, you should start with my CodeRage 6 talk (video - CodeCentral, slides + transcript, code).

Next in line are the articles on high-level threading constructs:

You should also take a look at my articles dealing with multithreading problems from real life.

Low-level multithreading

Alternatively, you can select from list of all my OmniThreadLibrary related articles.

OmniThreadLibrary internals

Presentations

ITDevCon 2010

Parallel Programming Made Easy – presentation (pps, pdf), code

Building Multithreaded Solutions with OmniThreadLibrary – presentation (pps, pdf), code

VDUG webinar 2010

Parallel Programming with OmniThreadLibrary - presentation, video (flash, mp4)

ADUG 2011

Getting Full Speed with Delphi - presentation, handouts, code

ITDevCon 2011

Multithreading Made Simple with OmniThreadLibrary - presentation (pps, pdf), code

ITDevCon 2012

Parallel Programming with OmniThreadLibrary - presentation (pps, pdf), code

DAPUG 2014

Multithreading - presentation (pps, pdf), code

Embarcadero Technology Partner Spotlight 2015

Simple Parallel Programming with Patterns and OmniThreadLibrary - video, slides (pps, pdf), code

CodeRage X

Simplify Parallel Programming with Patterns - video, slides (pps, pdf), code

Zlot Programistów Delphi 2017

Parallel Programming Done Right with OTL and PPL - presentation (pps, pdf), code

Demos

0_Beep

The simplest possible OmniThreadLibrary threading code.

1_HelloWorld

Threaded “Hello, World” with TOmniEventMonitor component created in runtime.

2_TwoWayHello

Hello, World with bidirectional communication; TOmniEventMonitor created in runtime.

3_HelloWorld_with_package

Threaded “Hello, World” with TOmniEventMonitor component on the form.

4_TwoWayHello_with_package

Hello, World with bidirectional communication; TOmniEventMonitor component on the form.

5_TwoWayHello_without_loop

Hello, World with bidirectional communication, the OTL way.

6_TwoWayHello_with_object_worker

Obsolete, almost totally equal to the demo 5_TwoWayHello_without_loop.

7_InitTest

Demonstrates .WaitForInit, .ExitCode, .ExitMessage, and .SetPriority.

8_RegisterComm

Demonstrates creation of additional communication channels.

9_Communications

Simple communication subsystem tester.

10_Containers

Full-blown communication subsystem tester. Used to verify correctness of the lock-free code.

11_ThreadPool

Thread pool demo.

12_Lock

Demonstrates .WithLock.

13_Exceptions

Demonstrates exception catching.

14_TerminateWhen

Demonstrates .TerminateWhen and .WithCounter.

15_TaskGroup

Task group demo.

16_ChainTo

Demonstrates .ChainTo.

17_MsgWait

Demonstrates .MsgWait and Windows message processing inside tasks.

18_StringMsgDispatch

Calling task methods by name and address.

19_StringMsgBenchmark

Benchmarks various was of task method invokation.

20_QuickSort

Parallel QuickSort demo.

21_Anonymous_methods

Demonstrates the use of anonymous methods as task workers in Delphi 2009.

22_Termination

Tests for .Terminate and .Terminated.

23_BackgroundFileSearch

Demonstrates file scanning in a background thread.

24_ConnectionPool

Demonstrates how to create a connection pool with OmniThreadLibrary.

25_WaitableComm

Demo for ReceiveWait and SendWait.

26_MultiEventMonitor

How to run multiple event monitors in parallel.

27_RecursiveTree

Parallel tree processing.

28_Hooks

Demo for the new hook system.

29_ImplicitEventMonitor

Demo for OnMessage and OnTerminated, named method approach.

30_AnonymousEventMonitor

Demo for OnMessage and OnTerminated, anonymous method approach.

31_WaitableObjects

Demo for the new RegisterWaitObject/UnregisterWaitObject API.

32_Queue

Stress test for new TOmniBaseQueue and TOmniQueue.

33_BlockingCollection

Stress test for new TOmniBlockingCollection, also demoes the use of Environment to set process affinity.

34_TreeScan

Parallel tree scan using TOmniBlockingCollection.

35_ParallelFor

Parallel tree scan using Parallel.ForEach (Delphi 2009 and newer).

37_ParallelJoin

ParallelJoin: Parallel.Join demo.

38_OrderedFor

Ordered parallel for loops.

39_Future

Futures.

40_Mandelbrot

Very simple parallel graphics demo.

41_Pipeline

Multistage parallel processes.

42_MessageQueue

Stress test for TOmniMessageQueue.

43_InvokeAnonymous

Demo for IOmniTask.Invoke.

44_Fork-Join QuickSort

QuickSort implemented using Parallel.ForkJoin.

45_Fork-Join max

Max(array) implemented using Parallel.ForkJoin.

46_Async

Demo for Parallel.Async.

47_TaskConfig

Demo for task configuration with Parallel.TaskConfig.

48_OtlParallelExceptions

Exception handling in high-level OTL constructs.

49_FramedWorkers

Multiple frames each communication with own worker task.

50_OmniValueArray

Wrapping arrays, hashes and records in TOmniValue.

51_PipelineStressTest

Pipeline stress test by [Anton Alisov].

52_BackgroundWorker

Demo for the Parallel.BackgroundWorker abstraction.

53_AsyncAwait

Demo for the Async/Await abstraction.

54_LockManager

Lock manager (IOmniLockManager) demo.

55_ForEachProgress

Demonstrates progress bar updating from a ForEach loop.

56_RunInvoke

Simplified ‘run & invoke’ low-level API.

57_For

Simple and fast parallel for.

58_ForVsForEach

Speed comparison between Parallel.ForEach, Parallel.For, and TParallel.For (XE7+).

59_TWaitFor

Demo for the TWaitFor class.

60_Map

Demonstrates the Parallel.Map abstraction.

61_CollectionToArray

Demonstrates the TOmniBlockingCollection.ToArray method.

62_Console

Demonstrates how to use OmniThreadLibrary from a console application.

63_Service

Demonstrates how to use OmniThreadLibrary from a service application.

64_ProcessorGroups_NUMA

Demonstrates how to work with processor groups and NUMA nodes.

65_TimedTask

Demonstrates the Parallel.TimedTask asbstraction.

66_ThreadsInThreads

Demonstrates how to start OmniThreadLibrary threads from background threads.

67_ArrayToCollection

Demonstrates the use of TOmniBlockingCollection.FromArray and TOmniBlockingCollection.FromRange.