3


为什么繁忙的循环通常会使用 100% 的 CPU 时间,而实现复杂算法的循环会使用更少的 CPU 时间?
谢谢 :)

4

5 回答 5

4

CPU 架构中的 JUMP 指令效率低下,因为它们会导致流水线刷新。繁忙的循环实际上是无限系列的 JUMP 指令。

于 2011-05-01T19:37:38.997 回答
3

一个复杂的算法当然可以使用 100% 的 cpu。然而,许多实现复杂算法的循环要么显式地周期性地产生线程和/或有一些代码在某些时候调用到操作系统中,要么线程被产生,要么需要等待(例如调用 co-处理器)发生。

于 2011-05-01T19:37:49.193 回答
2

首先,如果您的繁忙循环使用了 100%,那么您就没有做对。睡一会。

其次,复杂的算法通常涉及内存来存储值,而不仅仅是循环。任何时候线程需要使用内存、磁盘等外部资源时,CPU 都必须稍等片刻。这就是为什么你会看到它使用不到 100%。

于 2011-05-01T19:41:44.843 回答
1

“忙循环”不必与内存通信,因此 CPU 基本上自己完成所有工作,无需等待外部输入。

于 2011-05-01T19:38:56.477 回答
1

取决于那个“复杂算法”在做什么。它可以访问硬盘吗?网络请求?与任何其他硬件交互?发生这种情况时,CPU 将不得不等待这些事情完成,因此它会在等待该信息返回时无所事事(或将上下文切换到其他工作)。

于 2011-05-01T19:39:38.743 回答