2012-06-29 54 views
4

出于好奇,是全部无限循环坏?所有无限循环都不好吗?

  • 如果运行无限循环会发生什么坏的影响和后果?
  • 此外,如果它们并不全是坏的,请给出一些例子,以便它们能够达到有意义的目的吗?
  • 他们需要有东西来关闭实例吗?例如,我们总是在Java中使用它之后关闭StreamReader(不知道为什么)。

回答

4

我不确定你的意思是“坏”。

无限循环在许多场景中很常见,大多数是事件处理程序循环,其中程序位于无限循环中,并等待发生一些处理并返回等待的外部事件。这是图形用户界面和许多服务器编程的方式。

+0

我已经讨论过在无限循环内重载计算机内存的文章。为什么GUI和服务器不会超载内存? – Theone

+0

我不知道这些文章意味着什么是超载。一个无限循环,只有一个单独的sleep语句,不会影响机器的内存。 –

+1

当无限循环内存在内存泄漏时,可能会发生内存过载。 – risingDarkness

1
  • 如果你正确编写你的程序,没有因为循环而发生的副作用。
  • 关于微控制器无限循环用于永远不会到达程序结束。在微控制器程序结束时,大部分时间没有可以接管的操作系统。然后达到状态,没有定义的行为存在,程序可以做任何事情。
0

举一个简单的服务器的例子,监听连接

  • 监听请求
  • Get请求,菌种线程为该请求
  • 冲洗和重复

这某种场景很常见,你会在事件处理中一直看到它。

  • 程序将永远不会终止,除非你手动杀死它(也是一个积极的,视情况而定)

他们需要有东西来关闭实例?

  • 不,你不这样做,正如之前提到的,你可以手动杀死它,但你可以实现输入命令行接受kill命令来结束正常
+0

如果你能从外部杀死它,它是一个无限循环吗? ;) – risingDarkness

+1

编程中没有任何东西是我朋友的无限;) – Robotnik

0

有时你会听到这样的话杀手循环,指的是一个严重的行为循环(无限或其他)。通常保留用于无意中消耗大量CPU时间,内存或两者的循环。所有的杀手循环都很糟糕。

根据您的糖尿病状态,Froot循环也可能是杀手循环。

莫比乌斯带是很好的无限循环。

0

术语“无限循环”最常用于程序中的循环,如果不存在可能终止它的外部动作,该循环不会终止。在大多数情况下,使用任何“中断密钥”将中断信号发送到操作系统将证明它毕竟不是无限循环。而且电力浪涌或停电通常也会这样做。而在某些操作系统的平台上,可能会出现其他中断信号并暂停进程。

因此伪无限循环对于除了某些“外部”影响之外不想终止的进程很有用。

1

不,他们不坏,他们实际上是有用的。

这取决于在无限循环过程中是否遗留了吞噬内存的部分代码。几乎所有的东西都会使用无限循环:视频游戏,网络,机器学习等,因为无限循环通常用于获取即时用户输入/事件。

+0

你描述的循环可能没有那么明显的结束条件,但它们不是*无限的。 – Holger

+1

术语“无限”是指你需要机器无限期运行的程序吗? – Shinji

+0

不,我的意思是,例如,事件处理循环将终止某些事件,如关闭最后一个窗口或选择“退出”菜单项,因此即使像路由器等独立设备也有条件(如“关机”命令通过ssh接收),循环结束。真正的无限循环是非常罕见的。 – Holger

0

在实时程序中,无限循环是正常的。看一下Arduino IDE - 暴露的唯一两个函数是setup()和loop()。假定除非断开电源,否则loop()将永远不会退出。

+0

事实上,循环函数会退出,但它会永远被一次又一次地调用。即主函数基本上类似于: void main() setup(); while(1) loop(); } – frarugi87