我有一个服务器和一个客户端程序。服务器程序一直运行,等待来自客户端的请求。对于服务器响应每个客户端,使用 sleep() 函数需要 5 秒。
在多线程版本上,如果我同时调用两个客户端,每个客户端大约需要 5 秒 才能获得响应。在非多线程版本中,相同的测试为第一个客户端提供了 5 秒,为第二个客户端提供了 10。显然是可以预料的。虽然有点问题。处理器是单核 Athlon!
当cpu上的核心只有一个时,多线程服务器模块如何比非线程运行得更快?
最佳答案
因为你是在通过 sleep 来模拟“工作”。所以调度器只需要让一个线程休眠 5 秒;之后可以免费“服务”另一个线程。
简而言之,您没有使用 CPU,因此理论上您可以通过这种方式为大量客户端提供服务。现在,如果您要执行 CPU 密集型操作 5 秒,您就会看到不同之处。
如果“工作”是I/O
,也会发生同样的情况。由于实际上并未涉及 CPU,因此许多线程似乎同时工作。
关于C:线程程序如何在同一个单核上比非线程程序运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7043338/