From 87093cf2214df0ff58eea3f07697443fd88a46e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 13 Sep 2020 18:23:54 +0300 Subject: [PATCH] Update README.md --- thread-pool/README.md | 34 ++++++++++----- thread-pool/etc/thread-pool.png | Bin 14796 -> 0 bytes thread-pool/etc/thread-pool.ucls | 62 ---------------------------- thread-pool/etc/thread_pool_urm.png | Bin 0 -> 30120 bytes 4 files changed, 23 insertions(+), 73 deletions(-) delete mode 100644 thread-pool/etc/thread-pool.png delete mode 100644 thread-pool/etc/thread-pool.ucls create mode 100644 thread-pool/etc/thread_pool_urm.png diff --git a/thread-pool/README.md b/thread-pool/README.md index 62a2a3339..de6403fe8 100644 --- a/thread-pool/README.md +++ b/thread-pool/README.md @@ -9,16 +9,19 @@ tags: --- ## Intent -It is often the case that tasks to be executed are short-lived and -the number of tasks is large. Creating a new thread for each task would make -the system spend more time creating and destroying the threads than executing -the actual tasks. Thread Pool solves this problem by reusing existing threads -and eliminating the latency of creating new threads. + +It is often the case that tasks to be executed are short-lived and the number of tasks is large. +Creating a new thread for each task would make the system spend more time creating and destroying +the threads than executing the actual tasks. Thread Pool solves this problem by reusing existing +threads and eliminating the latency of creating new threads. ## Explanation + Real world example -> We have a large number of relatively short tasks at hand. We need to peel huge amounts of potatoes and serve mighty amount of coffee cups. Creating a new thread for each task would be a waste so we establish a thread pool. +> We have a large number of relatively short tasks at hand. We need to peel huge amounts of potatoes +> and serve mighty amount of coffee cups. Creating a new thread for each task would be a waste so we +> establish a thread pool. In plain words @@ -26,11 +29,18 @@ In plain words Wikipedia says -> In computer programming, a thread pool is a software design pattern for achieving concurrency of execution in a computer program. Often also called a replicated workers or worker-crew model, a thread pool maintains multiple threads waiting for tasks to be allocated for concurrent execution by the supervising program. By maintaining a pool of threads, the model increases performance and avoids latency in execution due to frequent creation and destruction of threads for short-lived tasks. The number of available threads is tuned to the computing resources available to the program, such as a parallel task queue after completion of execution. +> In computer programming, a thread pool is a software design pattern for achieving concurrency of +> execution in a computer program. Often also called a replicated workers or worker-crew model, +> a thread pool maintains multiple threads waiting for tasks to be allocated for concurrent +> execution by the supervising program. By maintaining a pool of threads, the model increases +> performance and avoids latency in execution due to frequent creation and destruction of threads +> for short-lived tasks. The number of available threads is tuned to the computing resources +> available to the program, such as a parallel task queue after completion of execution. **Programmatic Example** -Let's first look at our task hierarchy. We have a base class and then concrete CoffeeMakingTask and PotatoPeelingTask. +Let's first look at our task hierarchy. We have a base class and then concrete `CoffeeMakingTask` +and `PotatoPeelingTask`. ```java public abstract class Task { @@ -88,8 +98,8 @@ public class PotatoPeelingTask extends Task { } ``` -Next we present a runnable Worker class that the thread pool will utilize to handle all the potato peeling and coffee -making. +Next we present a runnable `Worker` class that the thread pool will utilize to handle all the potato +peeling and coffee making. ```java public class Worker implements Runnable { @@ -156,9 +166,11 @@ Now we are ready to show the full example in action. ``` ## Class diagram -![alt text](./etc/thread-pool.png "Thread Pool") + +![alt text](./etc/thread_pool_urm.png "Thread Pool") ## Applicability + Use the Thread Pool pattern when * You have a large number of short-lived tasks to be executed in parallel diff --git a/thread-pool/etc/thread-pool.png b/thread-pool/etc/thread-pool.png deleted file mode 100644 index 9e88a91962466ff5df7768abe04e8f5a9301625d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14796 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 ZnWDj8L-gf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/thread-pool/etc/thread_pool_urm.png b/thread-pool/etc/thread_pool_urm.png new file mode 100644 index 0000000000000000000000000000000000000000..3d433824f95a5f9a9076e7094ac81a67a1d982e4 GIT binary patch literal 30120 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