js同步编程与异步编程的区别,异步有哪些优点,为什么要异步,异步有哪些困扰

最近面试的被问到这样一个题
能大概说出些,但是不全

能否科普下相关内容,网上查的都大同小异

阅读 11.7k
4 个回答

这是个朴素但是不精确的回答, 主要是帮你理解

同步的代码, 在很多情况下, CPU其实是在等待中度过的, 比如等待一个网络连接, 等待MySQL服务器的数据返回
异步的代码, 就是把这些等待的时间给充分利用起来了, 把网络连接, 访问数据库这种耗时的工作时都在注册一个callback或者event之后切换出来, 让CPU先去干别的活(例如响应别的请求), 当网络连接,数据库返回结果时再回来执行刚才的callback中的代码

异步的代码可以大大的提升系统的容量上限, 因为充分利用了空闲的CPU时间, 但是对于单个的请求的性能提升帮助比较有限 (除非你的单个请求大量依赖这种IO操作)

同步编程与异步编程的区别
从编程方式来讲当然是同步编程的方式更为简单,但是同步有其局限性一是假如是单线程那么一旦遇到阻塞调用,会造成整个线程阻塞,导致cpu无法得到有效利用,而浏览器的js执行和浏览器渲染是运行在单线程中,一旦遇到阻塞调用不仅意味js的执行被阻塞更意味整个浏览器渲染也被阻塞这就导致界面的卡死,若是多线程则不可避免的要考虑互斥和同步问题,而互斥和同步带来复杂度也很大.实际上浏览器下因为同时只能执行一段js代码这意味着不存在互斥问题,但是同步问题仍然不可避免,以往回调风格中异步的流程控制(其实就是同步问题)也比较复杂,随着promise和async的引入这问题得到很大缓解。浏览器端的编程方式也即是GUI编程,其本质就是事件驱动的(鼠标点击,http请求结束等)异步编程更为自然。

js是单线程。单线程碰到阻塞就楞b了(阻塞在那边),所以要用异步。

新手上路,请多包涵

同步你得等着,不能干其他的;异步你得先说好了干啥,就不管了,干其他的了。后续代码有数据依赖,你就得同步候着。没依赖关系就各玩各的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏