iOS Javascript Workers终止()后CPU占用率过高

2024-04-23

我有一个复杂的 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) {
...
...

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

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

对终止的调用可能会被忽略或稍后排队,因为工作线程正在使用它可以使用的所有资源,没有时间进行消息处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS Javascript Workers终止()后CPU占用率过高 的相关文章

随机推荐

  • 为什么自动布局中的CGAffineTransform Rotate会移动动画视图?

    我想使用以下代码旋转 imageView UIView animateWithDuration 25 animations self imageView transform CGAffineTransformRotate self plus
  • 筛选提取-opencv

    我正在尝试开始使用 C OpenCv 进行筛选特征提取 我需要使用 SIFT 提取特征 将它们在原始图像 例如一本书 和场景之间进行匹配 然后计算相机姿势 到目前为止我已经找到了这个算法 http opencv itseez com doc
  • 如何在 Cucumber-JVM 中并行运行场景? [复制]

    这个问题在这里已经有答案了 我有一组为 Cucumber JVM 编写的验收测试 为了减少反馈时间 我想并行运行 功能的 场景 我该如何以最简单 最方便的方式做到这一点 我希望能够在 Java 代码中表达这一点 作为常规的 JUnit 测试
  • 带有不使用索引的查询变量的 SELECT

    我正在尝试 出于兴趣 通过使用局部变量的递归查询来检索简单邻接列表中的节点树 到目前为止我的解决方案很有趣 但我想知道 这是我唯一的问题 为什么 MySQL 拒绝使用任何INDEX来优化这个查询 MySQL 不应该能够通过使用INDEX 我
  • 由两个向量 (n,1) 构建的 R 距离矩阵

    我有两个向量 x n 1 and y n 1 真实值 我想创建一个矩阵M n n 这些向量包含每两对之间的距离 您可以使用outer功能 x lt sample 5 y lt sample 5 x 1 1 5 3 4 2 y 1 2 3 5
  • 这是在 Django 中进行依赖注入的正确方法吗?

    我正在尝试将依赖项注入到我的 Django 视图 控制器 中 这是一些背景知识 通常情况下 urls py文件是处理路由的 通常是这样的 urlpatterns path views get all posts name get all p
  • ngx-translate 在延迟加载模块中不显示任何文本

    我们在应用程序中使用 Angular 6 我们最近开始为我们的应用程序准备延迟加载 应用程序有多个延迟加载的路由 我们希望对所有路由使用单一语言文件 不需要将其分成块 但在引导程序上加载所有翻译 我尝试的第一件事就是在 AppModule
  • 使用 C# 进行 ECDHE 密钥交换

    我正在尝试使用 net 通过 TLS 1 2 进行 ECDHE 密钥交换 服务器正在响应 server key exchange 消息 该消息以 04 开头 所以我猜它是未加密的 根据我的理解 消息的前 32 位被视为值 X 接下来的 32
  • 分形加密

    我听说可以使用 Mandlebrot 集的图来加密数据 并且这种加密算法是量子安全的 与许多常用算法不同 不能用量子计算机破解 我在 Google 上查找更多信息 但只找到了一些针对非技术受众的文章 有谁有任何这方面的资源 我可以用它来了解
  • Scapy 不需要的 RST TCP 数据包

    为了理解TCP是如何工作的 我尝试伪造自己的TCP SYN SYN ACK ACK 基于教程 http www thice nl creating ack get packets with scapy http www thice nl c
  • 在 OSGi 参考注释中动态设置目标属性

    读完一篇article https thecarlhall wordpress com 2010 06 06 set osgi service reference target through configuration on 参考目标 h
  • 通过 Django All-auth 上的 AJAX post 请求登录

    根据 django all auth 的文档 它支持通过AJAX请求登录 当我向 accounts login 发出正常的post请求时 响应头的内容类型是 text html 但是当我进行 ajax 调用时 它是 application
  • 有没有办法为 GridPane 中的元素添加动画效果

    我正在尝试为元素添加动画GridPane 我有课Unit这代表了我想要移动的东西 public class Unit private Text text private Rectangle rectangle private StackPa
  • 将 php4/mysql4 迁移到 php5/mysql5:预期的 php 问题?

    我有一个遗留的Web应用程序php4 mysql4 MyISAM 数据库包含一些cms 一些用户数据 一些日历应用程序 现在我要迁移到带有 php5 mysql5 的新服务器 在这种迁移场景中 典型的 php 问题是什么 php sql 查
  • 是否可以在两个 Android 设备之间直接将数据传输给同一网络中的其他用户?

    假设我有两个 Android 移动设备 连接到同一个无线网络 并且该网络没有外部 互联网访问权限 在没有第三方软件的情况下 是否可以在不知道对方ip 不创建热点的情况下通过wifi传输数据 就像我们在 Windows 上所做的那样 如果 2
  • 生产准备 Ionic 应用程序的任务

    我想弄清楚是什么best从代码传递到最终可部署 apk ipa 的过程 到目前为止 我有一个使用 Karma Jasmine 的测试套件 它将 TypeScript 转换为 JS 并运行一些单元测试 我通过 gulp 开始这个过程 之后我所
  • PhantomJs - 如何渲染多页 PDF

    我可以使用 phantomJS 创建一页 PDF 但我在文档中找不到如何创建不同的页面 每个页面都来自 html 视图 并将它们放入一个 PDF 中 我正在为 NodeJS 使用 node phantom 模块 只需要指定一个paperSi
  • 多线程应用程序断点

    如果我对多线程应用程序设置断点 会发生什么情况 它是否停止所有线程 仅停止断点的线程 还是整个程序崩溃 如果可能的话 我是否只想停止一个线程 或者这会弄乱我的应用程序 如果我无法对多线程应用程序进行断点 我可以使用哪些调试技术 JAVA 就
  • 动态创建临时表,插入临时表,然后select

    基本上我希望能够根据现有表动态创建临时表 然后将值插入到临时表中 然后选择插入的值 我已经得到了可以创建临时表的部分 工作得很好 只是插入和选择表单的效果不太好 这是我当前的代码 declare table table OrdinalPos
  • iOS Javascript Workers终止()后CPU占用率过高

    我有一个复杂的 JavaScript 函数 可能需要 1 秒或很多分钟才能发送答案 所以我创建了一个正在工作的 Worker 我从 Swift 中的 UIWebView 调用这个函数 stringByEvaluatingJavaScript