美文网首页
异步同步/阻塞非阻塞

异步同步/阻塞非阻塞

作者: 你喜欢吃青椒吗_c744 | 来源:发表于2019-07-27 17:05 被阅读0次

    什么是同步和异步

    说到烧水,我们都是通过热水壶来烧水的。在很久之前,科技还没有这么发达的时候,如果我们要烧水,需要把水壶放到火炉上,我们通过观察水壶内的水的沸腾程度来判断水有没有烧开。随着科技的发展,现在市面上的水壶都有了提醒功能,当我们把水壶插电之后,水壶水烧开之后会通过声音提醒我们水开了。对于烧水这件事儿来说,传统水壶的烧水就是同步的,高科技水壶的烧水就是异步的。

    • 同步请求,A调用B,B的处理是同步的,在处理完之前他不会通知A,只有处理完之后才会明确的通知A。
    • 异步请求,A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,然后异步去处理,处理完之后通过回调等方式再通知A。
    • 所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由“调用者”主动等待这个“调用”的结果。而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态、通知来通知调用者,或通过回调函数处理这个调用。

    什么是阻塞和非阻塞

    还是那个烧水的例子,当你把水放到水壶里面,按下开关后,你可以坐在水壶前面,别的事情什么都不做,一直等着水烧好。你还可以先去客厅看电视,等着水开就好了。对于你来说,坐在水壶前面等就是阻塞的,去客厅看电视等着水开就是非阻塞的。

    • 阻塞请求,A调用B,A一直等着B的返回,别的事情什么也不干。
    • 非阻塞请求,A调用B,A不用一直等着B的返回,先去忙别的事情了。

    阻塞、非阻塞和同步、异步的区别

    其实乍一看,同步和阻塞不是一样的吗?异步和非阻塞不是一样的吗?

    • 阻塞、非阻塞说的是调用者,同步、异步说的是被调用者。
    • 阻塞和非阻塞指的是在等待/不等待的人本身。
    • 同步和异步指的是水壶本身。

    同步场景中包含阻塞和非阻塞

    在这篇文章中,同步代表着传统的水壶。

    • 在同步的情况下阻塞,即在水烧开之前我们一直坐在水壶前面,等着水开。
    • 在同步的情况下非阻塞。在水烧开之前我们先去客厅看电视了,但是水壶不会主动通知我们,需要我们时不时的去厨房看一下水有没有烧开。

    异步场景中包含阻塞和非阻塞

    异步代表着的是高科技水壶。

    • 在异步的情况下阻塞。在水烧发出提醒之前我们一直坐在水壶前面,等着水开。
    • 在异步的情况下非阻塞。在水烧发出提醒之前我们先去客厅看电视了,等水壶发出声音提醒我们。

    前端使用异步的场景有哪些?

    • 定时任务:setTimeout,setInterval
    • 网络请求:ajax请求,动态<img>加载
    • 事件绑定

    一个异步的例子/var let

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <script>
            for (let  i = 0; i <= 5; i++) {
         setTimeout(function() {
             console.log( i );
         }, i*1000);
          console.log( ' i : ' , i );
     }
     
    //  console.log( i ); 
    // var let 互换   
        </script>
    </body>
    </html>
    

    参考文章

    相关文章

      网友评论

          本文标题:异步同步/阻塞非阻塞

          本文链接:https://www.haomeiwen.com/subject/jyrerctx.html