<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Thread_pool</id>
	<title>Thread pool - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Thread_pool"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Thread_pool&amp;action=history"/>
	<updated>2026-05-06T00:04:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Thread_pool&amp;diff=5229091&amp;oldid=prev</id>
		<title>~2025-39420-57: Undid revision 1325745991 by Vitaly Zdanevich (talk): this actually breaks the example</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Thread_pool&amp;diff=5229091&amp;oldid=prev"/>
		<updated>2025-12-08T21:51:39Z</updated>

		<summary type="html">&lt;p&gt;Undid revision &lt;a href=&quot;/wiki143/index.php?title=Special:Diff/1325745991&quot; title=&quot;Special:Diff/1325745991&quot;&gt;1325745991&lt;/a&gt; by &lt;a href=&quot;/wiki143/index.php?title=Special:Contributions/Vitaly_Zdanevich&quot; title=&quot;Special:Contributions/Vitaly Zdanevich&quot;&gt;Vitaly Zdanevich&lt;/a&gt; (&lt;a href=&quot;/wiki143/index.php?title=User_talk:Vitaly_Zdanevich&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Vitaly Zdanevich (page does not exist)&quot;&gt;talk&lt;/a&gt;): this actually breaks the example&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:51, 8 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>~2025-39420-57</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Thread_pool&amp;diff=815392&amp;oldid=prev</id>
		<title>149.167.34.125: /* Performance */</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Thread_pool&amp;diff=815392&amp;oldid=prev"/>
		<updated>2025-06-18T01:33:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Performance&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:33, 18 June 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Performance==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Performance==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The size of a thread pool is the number of threads kept in reserve for executing tasks. It is usually a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tunable &lt;/del&gt;parameter of the application, adjusted to optimize program performance.&amp;lt;ref name=&quot;ACM, Thread pool size&quot; /&amp;gt; Deciding the optimal thread pool size is crucial to optimize performance.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The size of a thread pool is the number of threads kept in reserve for executing tasks. It is usually a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tuneable &lt;/ins&gt;parameter of the application, adjusted to optimize program performance.&amp;lt;ref name=&quot;ACM, Thread pool size&quot; /&amp;gt; Deciding the optimal thread pool size is crucial to optimize performance.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;One benefit of a thread pool over creating a new thread for each task is that thread creation and destruction overhead is restricted to the initial creation of the pool, which may result in better [[performance tuning|performance]] and better system [[Stability model|stability]].  Creating and destroying a thread and its associated resources can be an expensive process in terms of time. An excessive number of threads in reserve, however, wastes memory, and context-switching between the runnable threads invokes performance penalties.  A socket connection to another network host, which might take many CPU cycles to drop and re-establish, can be maintained more efficiently  by associating it with a thread that lives over the course of more than one network transaction.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;One benefit of a thread pool over creating a new thread for each task is that thread creation and destruction overhead is restricted to the initial creation of the pool, which may result in better [[performance tuning|performance]] and better system [[Stability model|stability]].  Creating and destroying a thread and its associated resources can be an expensive process in terms of time. An excessive number of threads in reserve, however, wastes memory, and context-switching between the runnable threads invokes performance penalties.  A socket connection to another network host, which might take many CPU cycles to drop and re-establish, can be maintained more efficiently  by associating it with a thread that lives over the course of more than one network transaction.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>149.167.34.125</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Thread_pool&amp;diff=450612&amp;oldid=prev</id>
		<title>imported&gt;Frap at 14:21, 30 April 2025</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Thread_pool&amp;diff=450612&amp;oldid=prev"/>
		<updated>2025-04-30T14:21:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Software design pattern}}&lt;br /&gt;
[[File:Thread pool.svg|thumb|400px|A sample thread pool (green boxes) with waiting tasks (blue) and completed tasks (yellow)]]&lt;br /&gt;
&lt;br /&gt;
In [[computer programming]], a &amp;#039;&amp;#039;&amp;#039;thread pool&amp;#039;&amp;#039;&amp;#039; is a [[software design pattern]] for achieving [[Concurrency (computer science)|concurrency]] of execution in a computer program. Often also called a &amp;#039;&amp;#039;&amp;#039;replicated workers&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;worker-crew model&amp;#039;&amp;#039;&amp;#039;,&amp;lt;ref&amp;gt;Garg, Rajat P. &amp;amp; Sharapov, Ilya &amp;#039;&amp;#039;Techniques for Optimizing Applications - High Performance Computing&amp;#039;&amp;#039; Prentice-Hall 2002, p. 394&amp;lt;/ref&amp;gt; a thread pool maintains multiple [[thread (computer science)|threads]] waiting for [[task (computers)|tasks]] to be allocated for [[concurrent computing|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.&amp;lt;ref&amp;gt;{{Cite book |first=Allen |last=Holub |authorlink=Allen Holub |title=Taming Java Threads |publisher=Apress |year=2000 |page=209}}&amp;lt;/ref&amp;gt; Another good property - the ability to limit system load, when we use fewer threads than available. 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.&lt;br /&gt;
&lt;br /&gt;
==Performance==&lt;br /&gt;
The size of a thread pool is the number of threads kept in reserve for executing tasks. It is usually a tunable parameter of the application, adjusted to optimize program performance.&amp;lt;ref name=&amp;quot;ACM, Thread pool size&amp;quot; /&amp;gt; Deciding the optimal thread pool size is crucial to optimize performance.&lt;br /&gt;
&lt;br /&gt;
One benefit of a thread pool over creating a new thread for each task is that thread creation and destruction overhead is restricted to the initial creation of the pool, which may result in better [[performance tuning|performance]] and better system [[Stability model|stability]].  Creating and destroying a thread and its associated resources can be an expensive process in terms of time. An excessive number of threads in reserve, however, wastes memory, and context-switching between the runnable threads invokes performance penalties.  A socket connection to another network host, which might take many CPU cycles to drop and re-establish, can be maintained more efficiently  by associating it with a thread that lives over the course of more than one network transaction.&lt;br /&gt;
&lt;br /&gt;
Using a thread pool may be useful even putting aside thread startup time.  There are implementations of thread pools that make it trivial to queue up work, control concurrency and sync threads at a higher level than can be done easily when manually managing threads.&amp;lt;ref&amp;gt;{{Cite web | url=https://doc.qt.io/qt-5/qthreadpool.html | title=QThreadPool Class &amp;amp;#124; Qt Core 5.13.1}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web | url=https://github.com/vit-vit/ctpl |title =GitHub - vit-vit/CTPL: Modern and efficient C++ Thread Pool Library.|website =[[GitHub]]|date = 2019-09-24}}&amp;lt;/ref&amp;gt;  In these cases the performance benefits of use may be secondary.&lt;br /&gt;
&lt;br /&gt;
Typically, a thread pool executes on a single computer. However, thread pools are conceptually related to [[server farm]]s in which a master process, which might be a thread pool itself, distributes tasks to worker processes on different computers, in order to increase the overall throughput. [[Embarrassingly parallel]] problems are highly amenable to this approach.{{cn|date=December 2016}}&lt;br /&gt;
&lt;br /&gt;
The number of threads may be dynamically adjusted during the lifetime of an application based on the number of waiting tasks. For example, a [[web server]] can add threads if numerous [[web page]] requests come in and can remove threads when those requests taper down.{{disputed inline|reason=This sounds more like pre-spawning than like a pool pattern.|date=December 2015}} The cost of having a larger thread pool is increased resource usage. The algorithm used to determine when to create or destroy threads affects the overall performance:&lt;br /&gt;
* Creating too many threads wastes resources and costs time creating the unused threads.&lt;br /&gt;
* Destroying too many threads requires more time later when creating them again.&lt;br /&gt;
* Creating threads too slowly might result in poor client performance (long wait times).&lt;br /&gt;
* Destroying threads too slowly may starve other processes of resources.&lt;br /&gt;
&lt;br /&gt;
== In languages ==&lt;br /&gt;
In [[Bash (Unix shell)|bash]] implemented by &amp;lt;code&amp;gt;--max-procs&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;-P&amp;lt;/code&amp;gt; in [[xargs]], for example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Fetch 5 URLs in parallel&lt;br /&gt;
urls=(&lt;br /&gt;
    &amp;quot;https://example.com/file1.txt&amp;quot;&lt;br /&gt;
    &amp;quot;https://example.com/file2.txt&amp;quot;&lt;br /&gt;
    &amp;quot;https://example.com/file3.txt&amp;quot;&lt;br /&gt;
    &amp;quot;https://example.com/file4.txt&amp;quot;&lt;br /&gt;
    &amp;quot;https://example.com/file5.txt&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
printf &amp;#039;%s\n&amp;#039; &amp;quot;${urls[@]}&amp;quot; | xargs -P 5 -I {} curl -sI {} | grep -i &amp;quot;content-length:&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |last=Shved |first=Paul |date=2010-01-07 |title=Easy parallelization with Bash in Linux |url=http://coldattic.info/post/7/ |access-date=2025-01-26 |website=coldattic.info |language=en}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |title=xargs(1) - Linux manual page |url=https://www.man7.org/linux/man-pages/man1/xargs.1.html |access-date=2025-01-26 |website=www.man7.org}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |title=Controlling Parallelism (GNU Findutils 4.10.0) |url=https://www.gnu.org/software/findutils/manual/html_node/find_html/Controlling-Parallelism.html |access-date=2025-01-26 |website=www.gnu.org}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In [[Go (programming language)|Go]], called worker pool:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import (&lt;br /&gt;
    &amp;quot;fmt&amp;quot;&lt;br /&gt;
    &amp;quot;time&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
func worker(id int, jobs &amp;lt;-chan int, results chan&amp;lt;- int) {&lt;br /&gt;
    for j := range jobs {&lt;br /&gt;
        fmt.Println(&amp;quot;worker&amp;quot;, id, &amp;quot;started  job&amp;quot;, j)&lt;br /&gt;
        time.Sleep(time.Second)&lt;br /&gt;
        fmt.Println(&amp;quot;worker&amp;quot;, id, &amp;quot;finished job&amp;quot;, j)&lt;br /&gt;
        results &amp;lt;- j * 2&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    const numJobs = 5&lt;br /&gt;
    jobs := make(chan int, numJobs)&lt;br /&gt;
    results := make(chan int, numJobs)&lt;br /&gt;
&lt;br /&gt;
    for w := 1; w &amp;lt;= 3; w++ {&lt;br /&gt;
        go worker(w, jobs, results)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for j := 1; j &amp;lt;= numJobs; j++ {&lt;br /&gt;
        jobs &amp;lt;- j&lt;br /&gt;
    }&lt;br /&gt;
    close(jobs)&lt;br /&gt;
&lt;br /&gt;
    for a := 1; a &amp;lt;= numJobs; a++ {&lt;br /&gt;
        &amp;lt;-results&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It will print:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ time go run worker-pools.go &lt;br /&gt;
worker 1 started  job 1&lt;br /&gt;
worker 2 started  job 2&lt;br /&gt;
worker 3 started  job 3&lt;br /&gt;
worker 1 finished job 1&lt;br /&gt;
worker 1 started  job 4&lt;br /&gt;
worker 2 finished job 2&lt;br /&gt;
worker 2 started  job 5&lt;br /&gt;
worker 3 finished job 3&lt;br /&gt;
worker 1 finished job 4&lt;br /&gt;
worker 2 finished job 5&lt;br /&gt;
&lt;br /&gt;
real    0m2.358s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |title=Go by Example: Worker Pools |url=https://gobyexample.com/worker-pools |access-date=2021-07-27 |website=gobyexample.com}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |title=Effective Go - The Go Programming Language |url=https://golang.org/doc/effective_go#channels |access-date=2021-07-27 |website=golang.org |quote=another approach that manages resources well is to start a fixed number of handle goroutines all reading from the request channel. The number of goroutines limits the number of simultaneous calls to process}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |title=The Case For A Go Worker Pool — brandur.org |url=https://brandur.org/go-worker-pool |access-date=2021-07-27 |website=brandur.org |quote=Worker pools are a model in which a fixed number of m workers (implemented in Go with goroutines) work their way through n tasks in a work queue (implemented in Go with a channel). Work stays in a queue until a worker finishes up its current task and pulls a new one off.}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Portal|Computer programming}}&lt;br /&gt;
* [[Asynchrony (computer programming)]]&lt;br /&gt;
* [[Object pool pattern]]&lt;br /&gt;
* [[Concurrency pattern]]&lt;br /&gt;
* [[Grand Central Dispatch]]&lt;br /&gt;
* [[Parallel Extensions]] (.NET)&lt;br /&gt;
* [[Parallelization]]&lt;br /&gt;
* [[Server farm]]&lt;br /&gt;
* [[Staged event-driven architecture]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist|30em|refs=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;ACM, Thread pool size&amp;quot; &amp;gt;{{Cite journal |journal=ACM SIGOPS Operating Systems Review | title=Analysis of optimal thread pool size | author=Yibei Ling | author2=Tracy Mullen | author3=Xiaola Lin |volume=34 |issue=2 |date=April 2000 | pages=42–55 |doi = 10.1145/346152.346320| s2cid=14048829 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* &amp;quot;[https://web.archive.org/web/20080207124322/http://today.java.net/pub/a/today/2008/01/31/query-by-slice-parallel-execute-join-thread-pool-pattern.html Query by Slice, Parallel Execute, and Join: A Thread Pool Pattern in Java]&amp;quot; by Binildas C. A.&lt;br /&gt;
* &amp;quot;[https://usf-cs272-spring2022.github.io/files/Thread%20Pools%20and%20Work%20Queues.pdf Thread pools and work queues]&amp;quot; by Brian Goetz&lt;br /&gt;
* &amp;quot;[https://www.codeproject.com/Articles/3631/A-Method-of-Worker-Thread-Pooling A Method of Worker Thread Pooling]&amp;quot; by Pradeep Kumar Sahu&lt;br /&gt;
* &amp;quot;[https://www.codeproject.com/Articles/3607/Work-Queue Work Queue]&amp;quot; by Uri Twig: C++ code demonstration of pooled threads executing a work queue.&lt;br /&gt;
* &amp;quot;[http://www.codeproject.com/Articles/6863/Windows-Thread-Pooling-and-Execution-Chaining Windows Thread Pooling and Execution Chaining]&amp;quot;&lt;br /&gt;
* &amp;quot;[http://www.codeproject.com/KB/threads/smartthreadpool.aspx Smart Thread Pool]&amp;quot; by Ami Bar&lt;br /&gt;
* &amp;quot;[http://msdn.microsoft.com/en-us/library/ms973903.aspx Programming the Thread Pool in the .NET Framework]&amp;quot; by David Carmona&lt;br /&gt;
* &amp;quot;[http://today.java.net/pub/a/today/2008/10/23/creating-a-notifying-blocking-thread-pool-executor.html Creating a Notifying Blocking Thread Pool in Java]&amp;quot; by Amir Kirsh&lt;br /&gt;
* &amp;quot;[http://www.ibm.com/developerworks/aix/library/au-threadingpython/ Practical Threaded Programming with Python:  Thread Pools and Queues]&amp;quot; by Noah Gift&lt;br /&gt;
* &amp;quot;[http://www.cs.wustl.edu/~schmidt/PDF/OM-01.pdf Optimizing Thread-Pool Strategies for Real-Time CORBA]&amp;quot; by Irfan Pyarali, Marina Spivak, [[Douglas C. Schmidt]] and Ron Cytron&lt;br /&gt;
* &amp;quot;[http://doi.acm.org/10.1145/1753196.1753218 Deferred cancellation. A behavioral pattern]&amp;quot; by Philipp Bachmann&lt;br /&gt;
* &amp;quot;[https://arxiv.org/abs/2105.00613 A C++17 Thread Pool for High-Performance Scientific Computing]&amp;quot; by Barak Shoshany&lt;br /&gt;
&lt;br /&gt;
{{Design Patterns patterns}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Threads (computing)]]&lt;br /&gt;
[[Category:Software design patterns]]&lt;br /&gt;
[[Category:Concurrent computing]]&lt;br /&gt;
[[Category:Parallel computing]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Frap</name></author>
	</entry>
</feed>