Two approaches to the improvement of the performance of client–server systems, multithreading and scheduling of servers, are investigated. Both of these approaches are observed to have a significant impact on system performance. The use of multithreading improves throughput characteristics of systems, whereas the deployment of appropriate scheduling strategies at servers can produce a significant improvement in mean client response times. Based on a simulation model a number of basic questions that are important in the context of scheduling on nonmultithreaded, as well as multithreaded, systems are analyzed. Two important factors, monopolization of servers by large requests and software bottlenecks, are observed to be important in the context of scheduling on client–server systems. Both server scheduling, as well as multithreading, can be used to control these effects and lead to a higher system performance. Scheduling policies based on request characteristics are observed to perform well. A new request characteristic that is useful in the scheduling of client–server systems in the presence of software bottlenecks is proposed. Selection of both the server process, as well as the thread within the server, is required when multiple server, are co-located on the same CPU. A comparison between two scheduling approaches, single level and two level is presented in the paper. The results of this research are useful primarily in the design of operating systems for client–server systems and are also of interest to system designers and users.