Loops 为什么非预期的无限循环会增加CPU的使用?

Loops 为什么非预期的无限循环会增加CPU的使用?,loops,cpu,infinite,Loops,Cpu,Infinite,我知道,非预期的无限循环通常会导致高CPU使用率。但是,我不太明白为什么。有人能给我解释一下吗?无限循环与运行的任何其他代码没有什么不同。计算机不知道无限循环不是一个需要大量迭代的复杂计算 除非无限循环包含调用某些系统函数的代码,这些函数会将时间返回操作系统,否则操作系统会将其视为一个进程,该进程正在积极处理某些事情,并给它执行时间。如果没有其他进程在运行,它将消耗100%的CPU(在单核系统上)。CPU在执行循环时无法执行任何其他操作(循环永远不会结束)。即使您使用的是先发制人的多任务系统(这

我知道,非预期的无限循环通常会导致高CPU使用率。但是,我不太明白为什么。有人能给我解释一下吗?

无限循环与运行的任何其他代码没有什么不同。计算机不知道无限循环不是一个需要大量迭代的复杂计算


除非无限循环包含调用某些系统函数的代码,这些函数会将时间返回操作系统,否则操作系统会将其视为一个进程,该进程正在积极处理某些事情,并给它执行时间。如果没有其他进程在运行,它将消耗100%的CPU(在单核系统上)。

CPU在执行循环时无法执行任何其他操作(循环永远不会结束)。即使您使用的是先发制人的多任务系统(这样无限循环只会永远阻塞自己的进程或线程),每次操作系统的先发制人调度器将CPU交给循环时,循环都会“吃掉”它的时间片——什么也不做,但每次都会吃掉一片CPU时间,因此,大量的CPU会丢失给所有其他线程,这些线程本来可以做有用的工作。

无限循环本身根本不是问题。大多数与用户交互的应用程序都是无限循环。他们反复等待用户,对其进行操作,然后再次执行循环。操作系统本身是一个无限循环。这些类型的无限循环被认为是“高效的”,因为尽管无限期地重复某些内容,它们还是周期性地输出一些对用户有用的内容


我想你关心的是非生产性无限循环。但很清楚为什么这些是一个问题。它们具有生产循环的所有缺点(消耗电力、使用CPU时间等),但没有任何优点,即它们不会产生任何有用的东西。

您可能指的是现代通用O/S中的

,任何正常的代码都会进入可中断的等待状态,这会阻止内核在需要时在该线程上执行任何操作。同意,但我将其与一个密集的计算进行了比较,例如为学术研究所做的计算。尽管您的第一段内容丰富且有用,但第二段是循环的。问题是,为什么非预期的无限循环会“消耗电力、占用CPU时间等等”?现在,您几乎不需要无限循环来等待用户交互。您通常使用阻塞操作系统或框架API,并以事件/回调的形式接收用户输入。虽然这个答案可能是正确的,但看起来太难了,因此对提出此类问题的人没有多大帮助。除了大量使用技术术语外,第二句(本段的大部分内容)特别长,无法解析。