Programming with POSIX threads
Programming with POSIX threads
Evaluating architectures for multithreaded object request brokers
Communications of the ACM
General-purpose threads with I/O completion ports
C/C++ Users Journal
Effects of Multithreading on Cache Performance
IEEE Transactions on Computers - Special issue on cache memory and related problems
An Efficient Meta-lock for Implementing Ubiquitous Synchronization
An Efficient Meta-lock for Implementing Ubiquitous Synchronization
Introduction to Probability Models, Ninth Edition
Introduction to Probability Models, Ninth Edition
Web server performance analysis
ICWE '06 Proceedings of the 6th international conference on Web engineering
Issues in performance modeling of applications with garbage collection
Proceedings of the 1st international workshop on Quality of service-oriented software systems
Rethink the virtual machine template
Proceedings of the 7th ACM SIGPLAN/SIGOPS international conference on Virtual execution environments
Hi-index | 0.00 |
The success of e-commerce, messaging middleware, and other Internet-based applications depends in part on the ability of network servers to respond in a timely and reliable manner to simultaneous service requests. Multithreaded systems, due to their efficient use of system resources and the popularity of shared-memory multi-processor architectures, have become the server implementation of choice. However, creating and destroying a thread is far from free, requiring run-time memory allocation and deallocation. These overheads become especially onerous during periods of high load and can be a major factor behind system slowdowns. A thread-pool architecture addresses this problem by prespawning and then managing a pool of threads. Threads in the pool are reused, so that thread creation and destruction overheads are incurred only once per thread, and not once per request. However, efficient thread management for a given system load highly depends on the thread pool size, which is currently determined heuristically. In this paper, we characterize several system resource costs associated with thread pool size. If the thread pool is too large, and threads go unused, then processing and memory resources are wasted maintaining the thread pool. If the thread pool is too small, then additional threads must be created and destroyed on the fly to handle new requests. We analytically determine the optimal thread pool size to maximize the expected gain of using a thread.