当我在这里谈到暂停问题时,听起来像是非终止是需要避免的,并且暂停问题使得无法知道程序/算法是否良好。
但是当我考虑它时,不是终止程序的例外而不是规则吗?我可以想到一类应用程序预计会在有限的时间内终止:编译器。从我正在使用的网络浏览器到桌面环境,文本编辑器,shell,服务器托管SO,到操作系统本身,其他所有内容都不应该自行终止。哎呀,即使包裹经理也应该要求用户确认。它们都旨在无限期地继续运行,除非用户或系统管理员另有说法。
我的观点是,你真的很难以证明某些东西会终止吗?如果有的话,证明某些东西将在有限的时间内退出将更多的是一个错误而不是相反的错误。
答案 0 :(得分:0)
我看到你的逻辑,但是你提到的这些程序在无限循环中运行直到终止,你仍然可以使用退出功能随时终止它们。非确定性终止的问题在于,您不知道程序何时会释放对其正在执行的操作的控制,以便终止它。
考虑一下。你编写一个程序,它完成一个循环并再次开始循环。每个周期与程序终止类似。但是,不是关闭程序,而是要求它重新开始。如果在该程序中对函数调用无限循环,程序会关注该函数,有效地阻止所有其他功能,直到该循环完成。提示,永远不会。这被用户视为程序冻结。
答案 1 :(得分:0)
终止程序不是重点。这只是一个很容易解释计算终止的情况。这是一个实际的例子:
当您访问网页时,您可能会开始运行一些Javascript。根据代码嵌入页面的方式,您可能必须等待此脚本在网页完全显示之前终止。如果脚本没有在特定时间限制内终止,您将收到如下消息:
(图片中的Chrome对话框)
你应该以某种方式决定脚本是否正在取得进展,如果给予更多时间,或者如果它陷入无限循环,它将会完成。你可能不知道答案,所以你猜。你等到你厌倦了等待然后放弃并杀死它,不知道当你按下按钮时它是否只是再完成一秒钟。
Chrome并没有告诉您该脚本已经无法停止并且永远无法终止,因为检测到无法解决的问题需要解决暂停问题。
它不仅仅是页面加载。 Javascript(在Web客户端上下文中)是事件驱动的。当外部事件发生时调用函数(即,单击表单提交按钮),并且在函数返回(终止)之前不处理该事件。非终止脚本是一个大问题。