单线程和异步

什么是异步?

先看一段代码

console.log(100)
setTimeout(function() {
    console.log(200)
}, 1000)
console.log(300)

运行之后我们会发现,先输出了100,然后是300,1秒之后再输出了200,这就是异步。

我们看看同步,看下面代码

console.log(100)
alert(200)
console.log(300)

这里我们发现最开始输出100,然后弹出了200,再不点击确认的情况下,永远不会输出300

对比之后我们发现,同步是有阻塞的,需要等待前面的执行完才会继续执行后面代码。而异步是无阻塞。无需等待的。

何时需要异步?

所有需要等待的情况都需要异步

使用异步的场景有哪些?

—— 定时任务:setTimeout, setInterval
—— 网络请求: ajax请求,动态<img>加载
—— 事件绑定

什么是单线程?

单线程就是一次只能执行一个任务。

这一个个任务形成任务队列等待执行,这时有些任务是耗时的,比如图片加载、网络请求、时间监听,如果让他们用同步一个一个区执行的话,效率会非常低,还有可能出现卡死的情况,这个时候异步的解决方案就出现了。

这里我们要注意,异步只是解决了同步阻塞的情况,并非是解决了单线程,js就是单线程语言。

猜你喜欢

转载自www.cnblogs.com/windspeech/p/10485099.html