【问题标题】:Are all infinite loops bad?所有无限循环都不好吗?
【发布时间】:2012-06-29 06:22:10
【问题描述】:

出于好奇,所有无限循环都不好吗?

  • 如果运行无限循环,会产生哪些不良影响和后果?
  • 另外,如果它们不全是坏的,你能否举一些例子,它们什么时候能起到有意义的作用?
  • 他们是否需要一些东西来关闭实例?例如,我们总是在 Java 中使用 StreamReader 后关闭它(不知道为什么)。

【问题讨论】:

    标签: infinite-loop


    【解决方案1】:

    我不确定你所说的“坏”是什么意思。

    无限循环在许多场景中很常见,主要是事件处理程序循环,其中程序处于无限循环中并等待一些外部事件发生,该事件被处理并返回等待。这是 GUI 和许多服务器的编程方式。

    更新 它们足以证明 some languages 中的无限循环构造的合理性。

    【讨论】:

    • 我遇到过一些文章,其中提到计算机内存在无限循环中时会过载。为什么 GUI 和服务器不会超载内存?
    • 我不知道这些文章所说的超载是什么意思。内部只有一个 sleep 语句的无限循环不会影响机器的内存。
    • 当无限循环内部存在内存泄漏时,可能会发生内存过载。
    【解决方案2】:
    • 如果您正确编写程序,不会因为循环而产生副作用。
    • 在微控制器上,无限循环用于永远不会到达程序的末尾。在微控制器程序结束时,大多数时候没有操作系统可以接管。然后到达状态,没有定义的行为存在,程序可以做任何事情。

    【讨论】:

      【解决方案3】:

      不,它们还不错,它们实际上很有用。

      这取决于您是否留下了在无限循环进行时占用内存的代码部分。无限循环几乎用于所有领域:视频游戏、网络、机器学习等,因为无限循环通常用于获取即时用户输入/事件。

      【讨论】:

      • 您描述的循环可能有不那么明显的结束条件,但它们不是无限的。
      • 您所说的“无限”是指需要机器无限期运行的程序吗?
      • 不,我的意思是,例如,事件处理循环将在某些事件上终止,例如关闭最后一个窗口或选择“退出”菜单项,因此即使是路由器等独立设备也有循环结束的条件(如通过 ssh 接收的“关闭”命令)。真正的无限循环非常少见。
      【解决方案4】:

      以一个简单的服务器为例,监听连接

      • 监听请求
      • 获取请求,为该请求生成线程
      • 冲洗并重复

      这种情况很常见,你在事件处理中经常看到。

      否定

      • 程序永远不会终止,除非您手动将其终止(也是肯定的,视情况而定)

      他们是否需要一些东西来关闭实例?

      • 不,你不需要,正如前面提到的,你可以手动终止它,但你可以实现一个输入命令行来接受终止命令以优雅地结束

      【讨论】:

      • 如果可以在外部杀死它是不是一个无限循环? ;)
      • 编程中没有什么是无限的,我的朋友 ;)
      【解决方案5】:

      您有时会听到短语killer loop,指的是行为不良的循环(无限或其他)。通常保留用于无意中消耗大量 CPU 时间、内存或两者兼有的循环。所有的杀手循环都是坏的。

      根据您的糖尿病状况,Froot Loops 也可以成为杀手循环。

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

      【讨论】:

        【解决方案6】:

        术语“无限循环”最常用于程序中的循环,如果没有可以终止它的外部操作,它不会终止。在大多数情况下,使用“中断键”向操作系统发送中断信号将证明它毕竟不是无限循环。通常,电涌或停电也会发生同样的情况。在某些带有某些操作系统的平台上,可能会出现其他中断信号并停止进程。

        因此,伪无限循环对于您不想终止的进程很有用,除非受到一些“外部”影响。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 实际上循环函数退出了......但它被一次又一次地调用......即主函数基本上是这样的: void main() { setup(); while(1) 循环(); }
          猜你喜欢
          • 2023-04-04
          • 1970-01-01
          • 2019-09-08
          • 2014-04-29
          • 2011-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多