gpt4 book ai didi

javascript - 终止无响应/无限循环的 WebWorker (Javascript)

转载 作者:行者123 更新时间:2023-12-03 10:47:54 31 4
gpt4 key购买 nike

我正在编写一种用于教育目的的语言,它应该在网络浏览器中运行。该语言编译为 JavaScript。

所以就存在死循环和递归的问题。在那之前,我认为解决方案是将运行时实现为 WebWorker 和 ui 上的按钮,以便在运行时间过长时终止它。

我刚刚发现,在测试我的语言时,网络工作线程并没有真正终止,通过调用:runtime.terminate();

至少在他的最后一份工作完成之前,我还没有测试过如果完成的话会发生什么。即使在我到目前为止找到的文档中,它也声明它会立即停止执行。

因此,即使用户可以继续以这种方式工作,后台运行的工作程序也会耗尽资源,并至少导致浏览器无响应。

因此,我需要任何方法来终止执行,以防出现无限循环或递归,以响应用户事件。因为我没有找到任何方法让 JavaScript 中的线程进入休眠状态,所以这也不起作用,或者是否有像网络工作人员 sleep 这样的东西?

您对我能做什么有什么建议吗?

最佳答案

我会这样做:

1) 让编译器生成代码,而不是从头到尾执行程序,而是将其分成段 - 例如,循环体或函数体可以是段。

2) 每个段应以 timeoutId = setTimeout(nextSegment, 0) 结束。这允许 Web Worker 在执行段之间接收和响应异步事件。

3) 当您想要终止 Web Worker 时,请使用 window.postMessage() 向其发送异步消息。

4) 在 Web Worker 内部,有一个事件处理程序,在收到该消息后,执行 clearTimeout(timeoutId)

关于javascript - 终止无响应/无限循环的 WebWorker (Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28502868/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com