没有合适的资源?快使用搜索试试~ 我知道了~
深入理解JavaScript中的并行处理
需积分: 6 0 下载量 60 浏览量
2020-11-23
16:21:38
上传
评论
收藏 94KB PDF 举报
温馨提示
试读
4页
前言 为什么说多线程如此重要?这是个值得思考的问题。一直以来,派生线程以一种优雅的方式实现了对同一个进程中任务的划分。操作系统负责分配每个线程的时间片,具有高优先级并且任务繁重的线程将分配到更多的时间片,而低优先级空闲的线程只能分到较少的时间片。 虽然多线程如此重要,但JavaScript却并没有多线程的能力。幸运的是,随着 Web Worker 的普及,我们终于可以在后台线程来处理资源密集型的计算了。而不好的方面是,目前制定的标准只适用于当前的生态系统,这有时候就比较尴尬了。如果你了解其他从一开始就支持多线程的语言的话,你可能会发现很多的限制,远非仅仅是实例化一个新线程,然后你操控这个实例就
资源推荐
资源详情
资源评论
深入理解深入理解JavaScript中的并行处理中的并行处理
前言前言
为什么说多线程如此重要?这是个值得思考的问题。一直以来,派生线程以一种优雅的方式实现了对同一个进程中任务的划
分。操作系统负责分配每个线程的时间片,具有高优先级并且任务繁重的线程将分配到更多的时间片,而低优先级空闲的线程
只能分到较少的时间片。
虽然多线程如此重要,但JavaScript却并没有多线程的能力。幸运的是,随着 Web Worker 的普及,我们终于可以在后台线程
来处理资源密集型的计算了。而不好的方面是,目前制定的标准只适用于当前的生态系统,这有时候就比较尴尬了。如果你了
解其他从一开始就支持多线程的语言的话,你可能会发现很多的限制,远非仅仅是实例化一个新线程,然后你操控这个实例就
能实现多线程。
这篇文章主要来介绍 Web Worker,包括什么时候使用,该怎么使用,它有什么奇怪的特性,会介绍在 Webpack 中如何使用
它,还有可能遇到的一些坑。
一、一、Web Workers
Web Worker 可能是在 JavaScript 中唯一可以真正实现多线程的方法了。我们需要按照下面的方式创建 worker :
const worker = newWorker("worker.js");
上面就定义了一个 Worker 实例,然后你可以通过 postMessage 与 worker 通信,就像和 iFrame 通信一样,只不过不存在跨
域的问题,不需要验证跨域。
worker.postMessage(num);
在 worker 代码中,你需要监听这些事件:
onmessage = (e) => {
// e.data will contain the value passed
};
这种方式是双向的,所以你也可以从 worker 中 postMessage 给我们的主程序。
在在 worker 代码中:代码中:
postMessage(result);
在主程序中:在主程序中:
worker.onmessage = (e) => {}
这就是 worker 最基本的用法。
异常处理异常处理
在你的 worker 代码中,有很多种方式来处理异常,比如你可以 catch 之后通过 postMessage 传递,这样可能需要多些一些代
码,但是确实最有效也最安全的。
另一种方式是用 onerror 事件,这种方式可以捕捉所有未处理的异常,并且交给调用方来决定如何处理。调用方式很简单:
worker.onerror = (e) => {};
为了调试方便,异常对象中还有一些额外的字段比如:filename,lineno,colno.
回收回收
将不需要的 worker 回收是非常重要的,worker 会生成真正的操作系统线程,如果你发现与很多 worker 线程同时运行,你可
以通过很简单的杀掉浏览器进程。
你有两种方式杀掉 worker 进程:在 worker 里和在 worker 外。我认为最好的处理 worker 生命周期的地方是在主页面里,但这
也要取决于你代码的具体情况。
杀掉一个 worker 实例,在外部可以直接调用 terminate()方法,这种方法可以立即杀掉它,释放所有它正在使用的资源,如果它
正在运行,也会立即终止。
如果你想要让 worker 自己去管理它的生命周期,可以直接在 worker 代码中调用stop()方法。
资源评论
weixin_38658405
- 粉丝: 4
- 资源: 1010
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功