in reply to Memory management
As Zentara suggested, there must not be a one-to-one correspondence between threads and requests.
Consider a fast-food restaurant. Every time someone places a new order, a new employee does not materialize out of thin air to cook the food, prepare it, and then fall over dead. No, the entire system is designed around a carefully arranged system of queues, and a limited number of workers, most of whom can handle many different chores.
You need to arrange to have a limited (and controllable) number of threads, all of whom continue to exist even if they have no work to do. If the system has more work to do than the current number of threads can handle, then some of that work must wait in queues ... as a mere description of work that is to be done in the near future.