同步异步阻塞非阻塞

同步和异步关注的是消息通信机制 (过程)

同步异步
发送方调用某个东西,发送方得等待这个调用返回结果才能继续往后执行发送方调用某个东西,发送方不会等结果,而是在调用发出后,发送方可继续执行后续操作,接收方通过状体来通知发送方,或者通过回掉函数来处理这个调用

阻塞和非阻塞 强调的是程序在等待调用结果(消息,返回值)时的状态

阻塞非阻塞
指调用结果返回之前,当前线程会被挂起。在不能立刻得到结果之前,该调用不会阻塞当前线程
ps:挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态,系统在超过一定的时间没有任何动作。

举例子

同步非阻塞页面轮询发送方每隔一定的时间向服务请求结果,这段时间发送方属于等待结果的情况,所以是同步的,每次请求都有返回一个状态(即结果还没有出来),是非阻塞的
同步阻塞一次普通的请求发送方向服务发起请求,一直等结果,结果没有出来,线程会被挂起,直到结果出来为止
异步非阻塞ajax异步发送方向发送请求,ajax会返回状态(我在执行了),不管ajax结果,直接往下执行,结果通过回掉函数来处理。
异步阻塞用java实现发送方向发送请求,没有结果,请求会被挂起,请求方不管结果,直接往下执行,结果通过回掉函数来处理

 代码补充:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
        $(document).ready(function(){
            $("button").click(function(){
                var a= $.ajax({
                    type: "post",
                    url:"a.php",
                    async:true,//true是异步   false是同步
                    data:{time:5},//返回时间需要5s
                    success:function(result){
                        $("#div1").html(result);
                        console.log(4);
                    }
                });
                var b= $.ajax({
                    type: "post",
                    url:"a.php",
                    async:true,
                    data:{time:10},//返回时间需要3s
                    success:function(result){
                        $("#div1").html(result);
                        console.log(3);
                    }
                });
                var c= $.ajax({
                    type: "post",
                    url:"a.php",
                    async:true,
                    data:{time:6},//返回时间需要0s
                    success:function(result){
                        $("#div1").html(result);
                        console.log(2);
                    }
                });

                console.log(1,a);
                console.log(2,b);
                console.log(3,c);
            });
        });
    </script>
</head>
<body>

<div id="div1"><h2>我是空白</h2></div>
<button>获取其他内容</button>

</body>
</html>

php

<?php

$a = $_POST['time'];
sleep($a);
echo $a;

 异步:ajax没有返回 url结果,当然看速度

 同步:ajax必定返回url结果

注意

1.要严格区分发送方和接收方,两边不要混肴看,不然会很懵

2.我觉得所有的概念都是相对的吧~我这边只是列出比较容易理解的个人见解,若有疑问欢迎留言

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值