C:在同一个内核上,线程程序如何比非线程程序运行得更快?

Pit*_*kos 1 c performance multithreading client-server pthreads

我有一个服务器和一个客户端程序.服务器程序一直在运行,等待来自客户端的请求.对于服务器响应每个客户端,使用sleep()函数需要5秒.

在多线程版本上,如果我同时调用两个客户端,则每个客户端需要大约5秒才能获得响应.相同的测试给出5秒用于第一客户端和10在非多线程版本的第二客户端.显然有待预期.虽然有一些问题.处理器是单核 Athlon!

当cpu上的核心只有一个时,多线程服务器模块如何比非线程运行得更快?

cni*_*tar 7

因为你正在通过睡觉来模拟"工作".所以调度程序只需要让一个线程休眠5秒钟; 之后,它可以"服务"另一个线程.

简而言之,您没有使用CPU,所以从理论上讲,您可以通过这种方式为很多客户提供服务.现在,如果你要做一些CPU绑定5秒的事情,你会看到差异.

如果"工作"会发生同样的情况I/O.由于CPU实际上没有涉及,许多线程似乎同时工作.


MBy*_*ByD 5

线程由操作系统处理,与您拥有的处理器数量没有直接关系.当一个线程休眠时,其他线程仍在运行.

来自维基:

在计算机科学中,执行线程是可由操作系统调度的最小处理单元.