Description
These drawbacks are evaded with this implementation: Within one process more than one instance can be instantiated and the number of available threads can be adjusted per instances. Additionally, the number of used threads is dynamic, so unused threads will starver over time and will be recreated when load goes up.
Downloads
References
Some of the ideas for this implementation were taken from the CodeProject article
Smart Thread Pool by Ami Bar.