JS中同步和异步的区别
- JS中同步和异步的区别
js是一门单线程语言,所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。如果一个任务耗时过长,那么后面的任务就必须一直等待下去,会拖延整个程序,常见浏览器无反应,可能就是一段代码死循环,造成程序卡住在这个位置,无法继续
为了解决这个问题,js的执行模式分为两种:同步和异步。
“同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的;“异步模式"则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
具体来说,异步运行机制如下:
(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2)主线程之外,还存在一个"任务队列”(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列”,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。
"异步模式"编程的4种方法
1.回调函数
2.事件监听,任务的执行不取决于代码的顺序,而取决于某个事件是否发生
3.发布订阅模式,也叫观察者模式
4.Promises对象
最基础的异步是setTimeout和setInterval函数,很常见,但是很少人有人知道其实这就是异步,因为它们可以控制js的执行顺序
作者:A落儿
链接:(https://www.jianshu.com/p/9e93a854d6a5)
来源:简书
本文参考文章:
(http://www.cnblogs.com/c3gen/p/6170504.html)
(http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html)
JS中同步和异步的区别相关推荐
- JS中同步与异步的理解
你应该知道,javascript语言是一门"单线程"的语言,不像java语言,类继承Thread再来个thread.start就可以开辟一个线程,所以,javascript就像一条 ...
- Web请求中同步与异步的区别
普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: ...
- java异步日志跟同步区别_AJAX中同步和异步的区别和使用场景
AJAX中根据async的值不同分为同步(async = false)和异步(async = true)两种执行方式:在W3C的教程中推荐使用异步执行: 下面来区别一下同步和异步有什么不同: 异步:在 ...
- JS中同步和异步问题及其区别
1.同步和异步 首先,我们浏览器常用的是JS语言,但其实相比于JAVA来说,JS其实是单线程语言,JavaScript在同一个时间只能做一件事,单线程意味着,如果在同个时间有多个任务的话,这些任务就需 ...
- js同步和异步的区别
js同步和异步的区别 同步任务 异步任务 同步和异步运行机制 首先,不同于其他后端语言,javascript语言是单线程机制.所谓单线程就是按次序执行,执行完一个任务再执行下一个.对于浏览器来说,也就 ...
- 线程中的同步和异步的区别
线程中的同步和异步的区别 一.同步 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作.是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率不 ...
- 简述同步和异步的区别
简述同步和异步的区别 同步: 同步的思想是:所有的操作都做完,才返回给用户.这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉 ...
- Java中同步和异步的区别是什么?优点缺点以及概念理解
同步:提交请求--->等待服务器处理--->服务器处理完毕返回的这个期间客户端浏览器不能干别的事 异步:请求通过事件触发--->服务器处理(这时客户端浏览器还可以做其他的事情)--- ...
- 同步和异步的区别及优缺点
学习编程,同步异步是必须要理解学习的知识点,接下来让我们一起通过举例来理解同步和异步的区别,以及同步和异步的优缺点吧 同步和异步的区别 程序里面的同步和异步和我们现实生活理解不太一样,一般我们对同步的 ...
最新文章
- 【Linux】一步一步学Linux——pidof命令(122)
- Matlab矩阵的拼接
- button的onclick函数一直刷新
- vue移动端,点击微信授权登录
- thinkphp开启子域名无法正常访问_内网穿透之动态域名解析_DDNS(二)
- 基于HAL库的STM32F704的电阻式触摸屏的学习
- 网站安全渗透测试团队公司解决防护方案
- pytorch之拿训练好的LeNet模型测试自己的手写图片预测失败
- 商务办公软件应用与实践【1】
- 评价模型——目标权重的确定
- Mysql:Got error 28 from storage engine
- markdown 转word
- Linux命令之修改用户账户usermod
- 设计模式之 State(状态模式)通俗理解
- 7月20日到12月3日
- 51单片机利用8266获取网络时间
- 高端服务器系统,浪潮高端服务器分析
- java 枚举类型enum ppt,关于JAVA枚举类使用的异常
- 通过链接自动生成二维码
- HDU 5224 Tom and paper(最小周长)