js的单线程问题
js是单线程的,其工作原理是将每一个任务切分成多个片段然后交给v8引擎去快速交替按照顺序执行这些片段,这个过程也称为轮转时间片。
注意:我们可以借助于 web worker 来模拟实现多线程:
worker线程的基础概念
web worker 线程的作用就是给 js 创造多线程运行环境,它允许主线程创建一个worker线程,主线程运行的同时worker线程也在运行,两者互不干扰,worker线程运行结束后会将运行的最终结果返回给主线程。这样做的好处是主线程可以把计算密集型或高延迟的任务交给worker线程执行,这样主线程就会变得轻松,不会被阻塞或拖慢。不过因为worker线程一旦创建就会一直运行,不会被主线程的活动打断,这样虽然有利于随时响应主线程但是同时也会造成资源的浪费,所以不应过度使用,用完注意随时关闭。
worker线程使用时的注意点
(1)文件同源的限制: 为了安全,worker线程无法读取本地文件,它所加载的脚本必须来自网络并且需要与主线程的脚本同源 。
(2)DOM操作限制: worker线程在与主线程不同的另一个全局上下文中运行,因此它无法读取主线程所在网页的DOM对象,但是可以获取XMLHttpRequest、setTimeout等浏览器API。
(3)通信限制: 由于worker线程与主线程不在同一个上下文,因此不能直接通信,需要通过postMessage方法来通信。
在主线程中生成 Worker 线程
使用Worker()构造函