Once you see how a client's request is processed by the Web server, you will understand why some techniques are much better than others when optimizing your application's throughput and scalability. To process the requests of hundreds or possibly thousands of clients, IIS employs sophisticated thread management to balance response time and system throughput. Instead of creating a new thread for each request, IIS maintains a pool of worker threads that are dedicated to processing requests. There are quite a few other threads running in IIS, but for the purposes of this discussion I'll focus on the threads in the request pool. As incoming requests arrive at the Web server, IIS must somehow dispatch worker threads from this pool to process them.
Threads are expensive.
Each consumes its fair share of resources. Thread pooling also sets an upward limit on the number of threads, which helps to conserve other important server-side resources. Thus, a thread pool makes it possible for an application to comfortably accommodate a larger number of users. IIS works with a default pool of up to 10 worker threads per processor. Since there is a finite number of worker threads dedicated to processing requests, IIS uses a queue to schedule incoming client requests when all the available worker threads are busy processing other requests.