Application Threading Models When we write a 'multi-threaded' application, we need to decide how threads are going to be used in our application. We could use a pool of threads to handle a set of requests, if there are multiple CPUs, or there is a lot of idle time when handling a request. We could launch a new thread per request, in case handling a request is a blocking operation, and it takes time to handle each request. We could run one thread to handle each different task in our code, to help avoid implementing complex state machines.