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)