最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 异步无处不在:同步模式和异步模式(一)

    正文概述 掘金(勾崽)   2021-01-11   455

    在 JS 代码中,异步无处不在,比如 Ajax 通信,Node 中的文件读写等等。而只有搞清楚异步编程的原理和概念,才能在 JS 的世界中任意驰骋,随便撒欢。

    单线程 JavaScript 异步方案

    首先我们要了解,JavaScript 代码的运行是单线程

    采用单线程模式工作的原因也很简单,最早是为了在页面中实现 Dom 操作。如果采用多线程,就会造成复杂的线程同步问题。如果一个线程修改了某个元素,另一个线程又删除了这个元素,浏览器渲染就会出现问题。

    单线程的含义就是,JS 执行环境中负责执行代码的线程只有一个。类似于只有一个人干活。他一次只能做一个任务,如果有多个任务自然是要排队的。

    优点:安全,简单。

    缺点:遇到任务量大的操作,会阻塞。后面的任务会长时间等待,出现假死的情况。

    异步无处不在:同步模式和异步模式(一)

    为了解决阻塞的问题,Javascript 将任务的执行模式分成了两种,同步模式( Synchronous)和 异步模式( Asynchronous)。

    同步模式与异步模式

    在程序中,代码依次执行,后面的任务需要等待前面任务执行结束后,才会执行。同步并不是同时执行,而是排队执行。

    先来看一段代码:

    console.log('global begin')
    function bar () {
      console.log('bar task')
    }
    function foo () {
      console.log('foo task')
      bar()
    }
    foo()
    console.log('global end')
    

    用动画形式展现下同步代码的执行过程:

    异步无处不在:同步模式和异步模式(一)

    如图所示,代码会按照既定的语法规则,依次执行。如果中间遇到大量复杂任务,后面的代码则会阻塞等待。

    再来看一段异步代码:

    console.log('global begin')
    
    ​setTimeout(function timer1 () {
      console.log('timer1 invoke')
    }, 1800)
    
    ​setTimeout(function timer2 () {
      console.log('timer2 invoke')
      setTimeout(function inner () {
        console.log('inner invoke')
      }, 1000)
    }, 1000)
    
    ​console.log('global end')
    

    异步代码的执行,要相对复杂一些。

    异步无处不在:同步模式和异步模式(一)

    代码首先按照同步模式执行,当遇到异步代码时,会开启异步执行线程。

    在上面的代码中,setTimeout 会开启环境运行时的执行线程运行相关代码。代码运行结束后,会将结果放入到消息队列,等待 JS 线程结束后,消息队列的任务再依次执行。

    流程图如下:

    异步无处不在:同步模式和异步模式(一)

    下篇,我们来聊聊回调函数和异步方案(ง •_•)ง。


    起源地下载网 » 异步无处不在:同步模式和异步模式(一)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元