【问题标题】:iOS Javascript Workers High CPU after terminate()终止()后iOS Javascript Workers高CPU
【发布时间】:2015-02-09 04:07:13
【问题描述】:

我有一个复杂的 javascript 函数,它可能需要 1 秒或几分钟才能发送答案。所以我创建了一个正在工作的 Worker,我在 Swift 中从我的 UIWebView 调用这个函数(stringByEvaluatingJavaScriptFromString)。我只等待 5 秒(在相同的 Javascript 中创建超时),之后我终止了工作程序(job.terminate()),然后我用其他参数启动了一个不同的工作程序(更简单),显示只需要 1 秒钟答案。问题是,即使在终止信号之后,第一个工作人员似乎也在后台运行。如图所示,WebCore: Worker 占用了大量 CPU。我怎样才能终止工人?

job = new Worker("main.js");

var t = setTimeout(function(){
  stop();
  logNode.innerText = 'NULL';
},5000);

function stop() {
    job.terminate();
    job = undefined;
}

(main.js):

importScripts('dist/algorithm.js');

var lp;

self.addEventListener('message', function(e) {
...
...

【问题讨论】:

    标签: javascript ios swift web-worker


    【解决方案1】:

    终止工作程序(并确保它)的最简单方法是注入一个布尔表达式以使代码“异常”退出其主循环(如果只有 1 或 2 个瓶颈,甚至可以正常返回在代码中。)。并且您可以在 catch 块中执行任何所需的清理,然后让它自然退出。

    我个人讨厌用终止或终止等函数结束线程,因为它会使事情处于未定义状态

    终止调用可能会被忽略或排队等待稍后,因为工作人员正在使用所有资源,它没有时间处理消息。

    【讨论】:

    • 谢谢达米安!工作得很好,我在 Worker 中强制一个异常,它真的杀死了这个过程 :) 非常感谢!
    • 在线程上调用终止/停止通常是一种危险的做法,有时会产生不可预测的结果。
    猜你喜欢
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2020-03-06
    • 2019-03-31
    • 1970-01-01
    • 2023-03-26
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多