Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 是否曾经出现过需要无限循环的情况?_Algorithm_Loops_Infinite Loop - Fatal编程技术网

Algorithm 是否曾经出现过需要无限循环的情况?

Algorithm 是否曾经出现过需要无限循环的情况?,algorithm,loops,infinite-loop,Algorithm,Loops,Infinite Loop,无限循环被认为是邪恶的。有什么好的用途吗 当无意中对它们进行编码时,CPU会达到峰值,我想内存也会达到峰值,特别是在循环内部分配变量时 如果有很好的用途,如何防止这些问题?基本上每个操作系统或服务器都在infinte循环中旋转 为了避免这些内存问题,通常不会在循环内分配内存,除非稍后可以在同一循环内释放内存。例如,您可以为请求分配内存,并在请求发出后将其删除 为了避免cpu峰值,您可以在操作系统中等待中断,或者调用阻塞函数,如poll(),它在每次迭代中等待一次新事件。除了在事件循环上运行的程序

无限循环被认为是邪恶的。有什么好的用途吗

当无意中对它们进行编码时,CPU会达到峰值,我想内存也会达到峰值,特别是在循环内部分配变量时


如果有很好的用途,如何防止这些问题?

基本上每个操作系统或服务器都在infinte循环中旋转

为了避免这些内存问题,通常不会在循环内分配内存,除非稍后可以在同一循环内释放内存。例如,您可以为请求分配内存,并在请求发出后将其删除


为了避免cpu峰值,您可以在操作系统中等待中断,或者调用阻塞函数,如poll(),它在每次迭代中等待一次新事件。

除了在事件循环上运行的程序(如@Christoph提到的系统进程),一些语言还有一个称为,这允许甚至鼓励您编写一个无限循环。诀窍在于,当对象“产生”(返回)某个表达式时,它只运行有限的时间。之后,它的状态被“冻结”,直到再次需要它。例如,在Python中,可以有一个对象在
之间交替:

def side():
    while True:
        yield "LEFT"
        yield "RIGHT"

a = side()
print a.next()
print a.next()
print a.next()
这将给出
左-右-左
函数看起来像一个无限循环,语句为
,而True:
,但每次调用只运行有限的时间。

首先,这个短语中的“无限”一词应该用得更宽松一些。我想你说的是一个
while(true)
循环,带有
break
指令,最终将结束,而不是一个循环,它将运行到时间和全人类的尽头

在前一种意义上,是的,有一些用例是合适的:

  • 游戏使用无限

  • 嵌入式程序使用无限长的内存

  • Windows应用程序使用无限


它们可能被不当使用的一个例子是,它们被用来通过旋转CPU来创建时间延迟,这是新手程序员为了避免处理计时器中断(或计时器事件,或其他非过程构造)而倾向于做的事情。然而,当旋转CPU以获取共享资源时,“无限循环”也是一个非常有效的实现选择。例如,即使是.NET CLR监视器也会在对内核事件句柄发出真正的等待并创建更昂贵的线程开关之前进行尝试。

有什么好的用途吗?我不认为有。我不确定是否有好的用途,因为根据定义,循环是无限的,永远不会停止,因此在程序崩溃之前耗尽所有资源。在某个时间间隔触发的事件可以被视为一个无限循环,其中包含睡眠。我认为你的系统时钟是一个无限循环,我发现它相当有用。好的无限循环:坏的无限循环:希望只有无限循环的特定实例被认为是坏的,而不是所有的。