Programming: Concurrency Patterns: Difference between revisions
From wikinotes
No edit summary |
|||
Line 11: | Line 11: | ||
<blockquote> | <blockquote> | ||
Manages task execution within a single thread. | Manages task execution within a single thread. | ||
</blockquote><!-- Monitor --> | </blockquote><!-- Monitor --> | ||
Line 37: | Line 36: | ||
* Join on worker threads (wait to close) | * Join on worker threads (wait to close) | ||
</blockquote><!-- Producer/Consumer --> | </blockquote><!-- Producer/Consumer --> | ||
= Blocking Queue = | |||
<blockquote> | |||
Generic FIFO in shared memory, with put/take methods protected by a lock.<br> | |||
Empowers the Producer/Consumer pattern. | |||
* If the queue has a fixed-size, <code>put</code> blocks until the queue has room for another item. | |||
* Setting max queue size may keep you from running out of memory in high volume producers | |||
</blockquote><!-- Blocking Queue --> |
Revision as of 02:17, 7 August 2022
Resources
Wikipedia: Concurrency Patterns https://en.wikipedia.org/wiki/Concurrency_pattern
Monitor Object
Manages task execution within a single thread.
Active Object
Decouple thread an object is created in from the thread the object's code will be executed in.
without exposing lock/queue/etc details to the caller.Thread/Subprocess objects are frequently exposed this way (ex:
QtCore.QThread
)
- Caller instantiates a proxy object
- On a method call, the proxy returns a Future/Promise object is created (in background, a request is enqueued)
- In background, a worker performs item from queue
- You may wait/join on the Future/Promise to wait for it to return it's results
Producer/Consumer
Safely parallelized task enqueueing/execution.
- A producer adds data to a synchronized queue
- A variable number of consumers process data from a synchronized queue in a loop
- When producer is finished, send a poison pill for each worker, informing it to break/exit the loop gracefully
- Join on worker threads (wait to close)
Blocking Queue
Generic FIFO in shared memory, with put/take methods protected by a lock.
Empowers the Producer/Consumer pattern.
- If the queue has a fixed-size,
put
blocks until the queue has room for another item.- Setting max queue size may keep you from running out of memory in high volume producers