javascript异步和单线程
程序员文章站
2022-05-18 11:18:33
...
什么是异步?
先举个例子:
console.log(100)
setTimeout(() => {
console.log(200)
}, 1000)
console.log(300)
上面的结果很容易看出,打印的顺序是100 300 200
从上面的例子可以看出,异步是不会阻塞进程的,而同步会阻塞进程,这也是同步和异步的区别。js中同步的典型例子为alert方法,他会阻塞进程,只有当打印后才会继续向下运行。
console.log(100)
alert(200)
console.log(300)
只有当alert方法弹出的对话框被点击确认,才会输出300
什么情况下需要异步?
有可能发生等待的情况,等待过程中不能阻塞其他程序的运行:
定时任务: setTimeout, setInterval
网页请求: ajax、动态< img >加载
事件绑定: addEventListener
什么是单线程
javascript在同一时间只能执行一个任务。javascript是单线程的,所以需要异步。
每一时刻最多会有一个任务处于执行状态下,其他任务处于就绪态或阻塞态(这里的阻塞态是指该任务没有获取到满足执行的资源,但是并不会阻塞其他任务的执行),一旦资源满足,则任务进入就绪队列,对于如何进入就绪队列,不同的浏览器有不同的调度算法。例如一个计时器setTimeout,当该计时器执行时,并不会立即执行内部的回调函数,而是先把它放在一边,等待计时的时间到达。当时间到达时,即回调函数调用的条件满足,浏览器会把执行函数的任务根据调度算法加入就绪队列,直到当前任务完成,再从就绪队列取出执行下一个任务。
以开始的一段代码为例,下图为异步执行过程:
1S时间以后,setTimeout的回调函数被调用,当前并没有执行任务,所以函数被立即执行
推荐阅读
-
Javascript vue.js表格分页,ajax异步加载数据
-
javascript中apply、call和bind的使用区别
-
javascript高级选择器querySelector和querySelectorAll全面解析
-
JavaScript Event Loop和微任务、宏任务
-
如何使用PHP实现javascript的escape和unescape函数
-
JavaScript中的toString()和toLocaleString()方法的区别
-
浅析javaScript中的浅拷贝和深拷贝
-
什么是异步操作(js同步和异步的理解)
-
php开发框架有哪些(javascript和java的区别)
-
javascript asp教程第四课 同时使用vbscript和javascript