# Pool Go Routines To Process Task Oriented Work

DevFeed: [Pool Go Routines To Process Task Oriented Work](<https://devfeed.tech/articles/pool-go-routines-to-process-task-oriented-work-22072.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2013/09/pool-go-routines-to-process-task.html>)

Published: 2013-09-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Concurrent Programming](<https://devfeed.tech/topics/concurrent-programming.md>)

Tags: [ardan-labs](<https://devfeed.tech/tags/ardan-labs.md>), [blog](<https://devfeed.tech/tags/blog.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [go](<https://devfeed.tech/tags/go.md>), [go-programming](<https://devfeed.tech/tags/go-programming.md>), [golang](<https://devfeed.tech/tags/golang.md>), [goroutines](<https://devfeed.tech/tags/goroutines.md>), [memory](<https://devfeed.tech/tags/memory.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-tuning](<https://devfeed.tech/tags/performance-tuning.md>), [programming](<https://devfeed.tech/tags/programming.md>), [resource](<https://devfeed.tech/tags/resource.md>), [threads](<https://devfeed.tech/tags/threads.md>)

## AI overview

This article explains the Work Pool pattern in Go for processing task-oriented work. It describes queuing tasks, reusing available goroutines, configuring pool and queue capacity, and tuning resource use and application performance.

## Source excerpt

After working in Go for some time now, I learned how to use an unbuffered channel to build a pool of goroutines. I like this implementation better than what is implemented in this post. That being said, this post still has value in what it describes. External resource on github.com: https://github.com/goinggo/work On more than one occasion I have been asked why I use the Work Pool pattern. Why not just start as many Go routines as needed at any given time to get the work done? My answer is always the same. Depending on the type of work, the computing resources you have available and the constraints that exist within the platform, blindly throwing Go routines to perform work could make things slower and hurt overall system performance and responsiveness. Every application, system and platform has a breaking point. Resources are not unlimited, whether that is memory, CPU, storage, bandwidth, etc. The ability for our applications to reduce and reuse resources is important. Work pools provide a pattern that can help applications manage resources and provide performance tuning options. Here is the pattern behind the work pool: