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

标签 c multithreading performance pthreads client-server

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

在多线程版本上,如果我同时调用两个客户端,每个客户端大约需要 5 秒 才能获得响应。在非多线程版本中,相同的测试为第一个客户端提供了 5 秒,为第二个客户端提供了 10。显然是可以预料的。虽然有点问题。处理器是单核 Athlon!

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

最佳答案

因为你是在通过 sleep 来模拟“工作”。所以调度器只需要让一个线程休眠 5 秒;之后可以免费“服务”另一个线程

简而言之,您没有使用 CPU,因此理论上您可以通过这种方式为大量客户端提供服务。现在,如果您要执行 CPU 密集型操作 5 秒,您就会看到不同之处。

如果“工作”是I/O,也会发生同样的情况。由于实际上并未涉及 CPU,因此许多线程似乎同时工作。

关于C:线程程序如何在同一个单核上比非线程程序运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7043338/

相关文章:

c - C 中的基本文件 IO 生成所有 a

c - c中的奇怪宏,使用多个语句

c# - 两个线程之间的交互

performance - 自定义映射器和 Reducer 与 HiveQL

c - 如何区分动态分配的 char* 和静态 char*

c - 为什么我的 Thrift (c_glib) 示例无法使用 "error: invalid conversion"进行编译?

c# - 将 Foreach 分成线程示例

java - ThreadPoolExecutor 拒绝错误

android - 获取路段或街道Android的最大速度限制

sql - 返回的列数是否会影响查询的速度?