我有一个单线程控制台应用程序。
我对 CPU 使用率的概念感到困惑。一个好的单线程应用程序应该使用约 100% 的 cpu 使用率(因为它可用)还是不应该使用大量的 cpu 使用率(因为它会导致计算机速度变慢)?
我做了一些研究,但还没有找到解决我困惑的答案。我是一名学生,仍在学习,所以任何反馈都将不胜感激。谢谢。
这取决于程序需要 CPU 做什么。如果它必须做很多工作,通常会在一段时间内使用所有一个内核。如果它把大部分时间都花在等待输入上,它自然会减少使用 CPU 的频率。我说“不那么频繁”而不是“少”,因为:
在任何给定时间,单线程程序要么运行,要么不运行,因此它们总是使用一个 CPU 内核的 100% 或 0%。看起来只使用 50% 或 30% 或其他任何东西的程序实际上只是在平衡计算工作时间和等待输入时间。与 CPU 相比,硬盘驱动器等设备非常慢,因此从磁盘读取大量数据的程序将比处理大量数字的程序使用更少的 CPU 资源。
程序有时使用 100% 的 CPU 是正常的,通常甚至很长时间,但如果你不需要它(即忙循环)就使用它是不礼貌的。这种行为会排挤其他可能正在使用 CPU 的程序。
硬盘驱动器也是如此。人们忘记了硬盘也是一种有限的资源,主要是因为任务管理器没有按百分比计算硬盘使用率。与处理器不同,由于磁盘访问没有固定的速度,因此很难将硬盘驱动器的使用量占总数的百分比来衡量。但是,在磁盘上移动 1GB 数据比使用 CPU 在内存中移动 1GB 数据花费的时间要长得多,并且 HDD hogging 的性能影响与 CPU hogging 一样糟糕或更差(它们往往会变慢你的系统爬起来,看起来没有任何 CPU 使用正在发生。你可能以前见过)
您最初编写的任何小型学术程序都有可能在短时间内使用所有一个内核,然后等待。在命令提示符下提示输入数字等简单的事情是等待部分,之后对其进行任何操作和学术界的操作是活动部分。
这取决于它在做什么。不同类型的操作有不同的需求。
没有非主观的方式来回答这个全面适用的问题。
唯一正确的答案是“它应该只使用完成这项工作所需的 CPU 数量,而不是更多。”
换句话说,尽可能多地优化并且合理。一般来说,CPU 越低越好,它的执行速度越快,崩溃的可能性也就越小,对用户的干扰也就越少。
通常,诸如预测天气之类的算法繁重的任务必须由操作系统管理,因为它需要所有的 cpu 运行时间与允许运行的时间一样长(直到它完成)。
另一方面,具有静态用户界面的图形应用程序,例如用于存储一些数据以进行记录保存的 Windows 窗体应用程序,应该需要非常低的 CPU 使用率,因为它主要是在等待用户做某事。