js同步编程与异步编程的区别,异步有哪些优点,为什么要异步,异步有哪些困扰
最近面试的被问到这样一个题
能大概说出些,但是不全
能否科普下相关内容,网上查的都大同小异
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
最近面试的被问到这样一个题
能大概说出些,但是不全
能否科普下相关内容,网上查的都大同小异
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
这是个朴素但是不精确的回答, 主要是帮你理解
同步的代码, 在很多情况下, CPU其实是在等待中度过的, 比如等待一个网络连接, 等待MySQL服务器的数据返回
异步的代码, 就是把这些等待的时间给充分利用起来了, 把网络连接, 访问数据库这种耗时的工作时都在注册一个callback或者event之后切换出来, 让CPU先去干别的活(例如响应别的请求), 当网络连接,数据库返回结果时再回来执行刚才的callback中的代码
异步的代码可以大大的提升系统的容量上限, 因为充分利用了空闲的CPU时间, 但是对于单个的请求的性能提升帮助比较有限 (除非你的单个请求大量依赖这种IO操作)
同步编程与异步编程的区别
从编程方式来讲当然是同步编程的方式更为简单,但是同步有其局限性一是假如是单线程那么一旦遇到阻塞调用,会造成整个线程阻塞,导致cpu无法得到有效利用,而浏览器的js执行和浏览器渲染是运行在单线程中,一旦遇到阻塞调用不仅意味js的执行被阻塞更意味整个浏览器渲染也被阻塞这就导致界面的卡死,若是多线程则不可避免的要考虑互斥和同步问题,而互斥和同步带来复杂度也很大.实际上浏览器下因为同时只能执行一段js代码这意味着不存在互斥问题,但是同步问题仍然不可避免,以往回调风格中异步的流程控制(其实就是同步问题)也比较复杂,随着promise和async的引入这问题得到很大缓解。浏览器端的编程方式也即是GUI编程,其本质就是事件驱动的(鼠标点击,http请求结束等)异步编程更为自然。
js是单线程。单线程碰到阻塞就楞b了(阻塞在那边),所以要用异步。
同步你得等着,不能干其他的;异步你得先说好了干啥,就不管了,干其他的了。后续代码有数据依赖,你就得同步候着。没依赖关系就各玩各的