Language agnostic 在程序中实施人为延迟是一种好的做法吗?

Language agnostic 在程序中实施人为延迟是一种好的做法吗?,language-agnostic,while-loop,delay,Language Agnostic,While Loop,Delay,我注意到,每当一个程序依赖而循环保持其打开时,它几乎使用100%的CPU。加上20毫秒的延迟,这个数字降到了0% 以下代码将使CPU达到最大值: while(executing){ // Do some things if(Quit) executing = 0; } 但下一个不会: while(executing){ // Do some things if(Quit) executing = 0; delayFunction(20);

我注意到,每当一个程序依赖
循环保持其打开时,它几乎使用100%的CPU。加上20毫秒的延迟,这个数字降到了0%

以下代码将使CPU达到最大值:

while(executing){
    // Do some things
    if(Quit) executing = 0;
}
但下一个不会:

while(executing){
    // Do some things        
    if(Quit) executing = 0;
    delayFunction(20); //20ms delay
}
这样做对吗?如果是这样,什么才算是适当的延迟


是否有更好的方法避免CPU过载?

操作系统级别的调度程序负责跨进程分配CPU资源和时间

在没有延迟的情况下,计算机会尽可能快地运行循环,因此它会使用此过程可用的所有资源

延迟一段时间后,您告诉调度程序他有X毫秒的时间做其他事情。如果没有其他进程需要处理时间,那么CPU对此延迟不做任何处理


这是一个很大的问题,这是一个特性。没有比这更好的办法了。所有的魔力在于等待的毫秒数。但这取决于许多因素,因此不可能具体说明。

这两种“延迟技术”的概念不同。首先,你所做的只是旋转CPU,你的程序实际上在CPU上运行,并消耗大量资源

另一方面,在第二种情况下,您可以想象您的程序被挂起20毫秒,同时CPU可以做其他事情(或者只是保持空闲)。背景中发生的事情或多或少是一个问题


通常,您会希望使用第二种方法,因为它占用的CPU要少得多

延迟所能达到的效果是程序执行的时间更长。 操作系统负责进程之间的CPU共享。 只要你不将进程优先级转换为实时,线程优先级最高,就不必担心延迟

< P>强> <强>。有很多因素需要考虑,有些自愿性的<代码>屈服(<)/代码>或<代码>延迟()/代码>看起来不错,有些使它们看起来不好。p>
  • 我们在谈论什么样的机器和任务?(使用收音机可能会导致手机过热。)
  • 手头的任务有多重要?(心脏监护仪必须按时采集和显示样本。)
  • 机器还在做什么?(虚拟机主机运行大量客户机,CPU循环使其他进程无法使用。)
  • 监管代码会抢占任务吗?(大多数操作系统将让更高优先级的任务在中间循环中接管。)

    • 插入故意延迟的原因有很多。我曾经做过填充大型数据库的早期工作。虽然它仍然很小,但响应速度很快,但随着越来越多的数据被添加到数据库中,响应速度显然会变慢。为了让用户的期望保持现实,我们在开始时设置了一个最小响应时间,这样用户就不会看到响应变慢。任何在不到0.5秒的时间内返回的内容都会一直保留到最短时间过去,然后才发送给用户。

      第一个示例没有任何延迟,这就是问题所在。我想知道,在循环中添加延迟以保持程序打开是否是一种常见的做法,这样就不会在什么都不做的情况下使CPU达到最大值。这不是一种常见的做法,因为它非常消耗CPU。但这是一种增加程序流程延迟的方法。假设你想要一个20毫秒的延迟,在1到100k的范围内添加一个for循环,里面没有指令,你就这样做了,你人为地创造了一个小的延迟。