我知道意外循环的无限循环通常会导致 CPU 使用率很高。但是,我不太明白为什么。谁能给我解释一下?
4 回答
CPU 在执行该循环时不能做任何其他事情(永远不会结束)。即使您使用的是抢先式多任务系统(这样无限循环只会永远阻塞它自己的进程或线程),每次操作系统的抢先式调度程序交给它时,循环都会“吃掉”它的时间片下一个切片的 CPU —— 什么都不做,但每次都会占用一个切片的 CPU 时间,因此所有其他线程都会丢失大量 CPU,否则这些线程可能会做有用的工作。
无限循环与运行的任何其他代码没有什么不同。计算机不知道无限循环并不是一个需要大量迭代的复杂计算。
除非无限循环包含调用某些系统函数的代码,这些代码将时间返回给操作系统,否则操作系统会将其视为一个正在积极处理某事并为其提供时间执行的进程。如果没有其他进程在运行,它将占用 100% 的 CPU(在单核系统上)。
无限循环本身根本不是问题。大多数与用户交互的应用程序都是无限循环。他们反复等待用户,对其采取行动,然后再次执行循环。操作系统本身就是一个无限循环。这种无限循环被称为“富有成效的”,因为尽管会无限重复某些内容,但它们会定期输出对用户有用的内容。
我猜你担心的是非生产性的无限循环。但很清楚为什么这些是一个问题。它们具有生产循环的所有缺点(消耗功率、使用 CPU 时间等)而没有任何优点,即。他们不会产生任何有用的东西。
您可能指的是Halt and Catch Fire 指令