js里的多线程

js里的多线程

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>header</h1>
    <script>
        // js是单线程的,一旦被中断,就无法继续执行
        // 3s后中断
        setTimeout(function() {
            alert(111)
        }, 3000)
        // 为了不中断后面语句的执行,我们将代码放入worker函数,开辟一个新线程
        // var i = 1;
        // setInterval(function() {
        //     console.log(i);
        //     i++;
        // }, 1000)

        // 开辟一个新线程
        // 放入存储耗时长的代码的文件所在路径(path)
        new Worker("outer_1.js");

        //     new Worker()是真正的实现了多线程,而 setTimeout 和 setInterval
        // 不是真正意义上的开启了多线程,没有真正实现异步;因为定时器是相当于
        // 把函数执行从主线程队列拿出来,等到时间到再插入主线程;其实还是通过单线程实现的;
        // 只要主线程被打断,那么定时器都会被打断;而worker函数就不会受主线程影响,主线程被打断了也继续执行
    </script>
</body>
</html>

总结:
new Worker()是真正的实现了多线程,而 setTimeout 和 setInterval 不是真正意义上的开启了多线程,没有真正实现异步;因为定时器是相当于把函数执行从主线程队列拿出来,等到时间到再插入主线程;其实还是通过单线程实现的;只要主线程被打断,那么定时器都会被打断;而worker函数就不会受主线程影响,主线程被打断了也继续执行

不过这里我们要注意:需要借助服务器才能运行,我们把需要异步执行的代码放入另一个文件

" outer_1.js"

var i = 1;
setInterval(function() {
    console.log(i);
    i++;
}, 1000) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值