【发布时间】:2014-05-22 04:35:29
【问题描述】:
这更像是一个假设性问题。有时 javascript 代码有可能进入无限循环并在开发的早期阶段特别阻塞所有内容。我知道最好的解决方案是编写代码,这样这种情况就不会出现,但是如果在某种情况下不可能编写完整的代码(可能是因为我们无法控制输入或其他东西)怎么办。
我们有什么方法可以通过编程确定代码何时处于无限循环并终止它?
可能会在单独的线程或子进程中同步运行可能发生此类事情的代码片段,并确定该线程/进程何时处于无限循环中。
一个人怎么能做到这一点?是否可以通过单独确定线程(主线程或子线程)的 CPU 使用率来确定线程(主线程或子线程)何时处于无限循环中?
根据下面在 cmets 中的讨论,我意识到仅根据跟踪类似语句的重复执行和高资源利用率来识别阻塞无限循环是不可能的。所以我认为解决方案在于两者的结合。但这又回到了我们之前的问题。我们如何通过脚本来衡量 CPU 使用率?
【问题讨论】:
-
这是您经常遇到的问题吗?即使是这样,一个很好的判断方法是浏览器是否无响应,然后提供终止您的脚本。
-
它被称为停机问题并在此处阅读描述en.wikipedia.org/wiki/Halting_problem。简而言之,对于某些给定的输入,永远无法确定程序是否终止
-
@dlev 虽然我面临这样的问题,但它们总是很容易解决。主要是我自己的错误。我问的问题更多是出于假设的原因。而且我只想以编程方式为该线程执行此操作,而不是页面中的所有脚本
-
不确定你所说的“只有那个线程”是什么意思,javascript是单线程的,这就是问题所在,你用永远不会完成的错误代码阻塞了那个线程,当线程被阻塞时你真的没有任何方法可以运行更多的 javascript 来解决阻塞问题,因为唯一的线程被阻塞了。这通常不是问题,因为以这种方式阻塞线程的脚本发生是因为开发人员犯了一个错误,解决它的唯一方法是修复错误代码。
-
不,没有,一旦你犯了这样的错误,浏览器就会停止响应,并且在javascript中你无法判断浏览器是否停止响应,或者做任何事情。同样,唯一的解决方案是确保不会发生这种情况,这应该不是很难做到的。