精华内容
下载资源
问答
  • 同步阻塞和同步非阻塞的区别
    2022-01-09 21:26:37

    同步与异步

    1.同步和异步关注的是消息通信机制,所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。比如netty框架中ChannelFuture的sync()方法就是客户端同步等待客户端与服务器端建立连接之后的结果。
    2.异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。比如
    netty框架中ChannelFuture的connect()是客户端异步发出与服务器端建立连接的请求,在没有建立之前的所有和两方通信的代码都不会达到预期。

    阻塞与非阻塞

    1.阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
    2.阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

    更多相关内容
  • 主要介绍了java 中同步、异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下
  • 主要介绍了JAVA同步、异步、阻塞和非阻塞之间的区别,文中讲解非常细致,帮助大家更好的理解学习,感兴趣的朋友可以了解下
  • 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞之间的区别先验知识此处的异步指的是什么同步、异步、阻塞、非阻塞同步阻塞、同步非阻塞、异步阻塞、异步非阻塞一个生动的例子总结与补充 先验知识   在解释这几个概念...

    先验知识

      在解释这几个概念之前,需要注意的是:

    • 首先需要知道操作系统层面的同步、异步、阻塞这几个概念的含义。关于这方面的内容,可见笔者的另一篇博客:

      同步与异步、并行与并发、阻塞与挂起:
      https://blog.csdn.net/wangpaiblog/article/details/116114098

    • 本文解释的概念至少适用于编程语言层面,但不适用于操作系统层面。原因是,在软件工程中,任何设计都可以进行分层封装。其中,每个中间层的设计对上层与下层来说都是透明的。因此,编程语言层面的“同步、异步、阻塞”与操作系统层面的没有必然联系。

    • 有人喜欢对“同步阻塞、同步非阻塞、异步阻塞、异步非阻塞”的概念,首先区分发送方和接收方,但实际上,无论是发送还是接收,本质上都是一种“请求”的过程,如果不在操作系统层面进行分析,区分这两者实无必要。

    • 同步、异步是针对个任务(此任务不同于操作系统理论中的作业、进程等,指的只是一个线程中要做的一件事情。本文中的任务都指的是这个。)来说的,其中一个任务为一开始就在执行、所主要关注的,称为主任务,而另一个是与主任务相关的一个任务,称为相关任务。当主任务与相关任务分别位于不同的线程时,称该线程分别为主线程、相关线程。

    • 阻塞是针对主任务所在的线程来说的。当主任务和相关任务位于同一个线程时,不存在“阻塞”,即此情况下不存在同步阻塞、异步阻塞。

      但对于下面的情况,主任务和相关任务一定位于不同的线程:

      • 主任务发起的是 I/O 请求

      • 主任务发起的是网络请求

    • 请求是一个期望获得资源的行为,而“同步阻塞、同步非阻塞、异步阻塞、异步非阻塞”描述的是获得期望资源之前的行为,而不是其之后的行为。这四个概念中的“阻塞”不描述在获得资源之后主线程的程序走向。

    此处的异步指的是什么

      首先需要明白,无论是对“异步”还是“非阻塞”的主线程,都不可能凭空接收到外界、执行没有事先设置的程序。而之所以主线程的行为会受到相关线程的影响,是因为主线程会周期性地调用一种“请求”函数,而此“请求”函数的行为会受相关线程的影响。

      其次,对于操作系统,只要其启动,就一直在运行程序。如果没有显式的进程,就运行一个默认的空进程。另外,编程人员不可能事先预计用户本次对本软件的使用时长,然后在软件中设置一个运行时间与其正好相等的一种任务。这就是说,线程在执行时,实际上是在无限循环、周期性地执行一系列任务。于是,可以在每个任务之间插入一个中断点,用于执行额外的操作(任务),以实现对其它线程的交互,这就是异步操作。理由是,中断点之前的任务都已经完成,而任务之间本是不应有任务的(因为任务之间的部分属于空档,没有任何东西),因此,任务之间的中断点是由中断点之前的某任务插入的。由于某种原因,该任务并不想马上执行某操作,而是选择将其移至一系列任务执行完之后的某个任务之间的空档来执行,因此称为异步操作。

    同步、异步、阻塞、非阻塞

      前面已经指出了关键性的知识点,下面将直接给“同步阻塞、同步非阻塞、异步阻塞、异步非阻塞”的概念。为了更好的说明,笔者做了一张图,如下:

    在这里插入图片描述

      对于主线程上执行的一系列任务,如果其中的某个任务需要与相关线程交互,当其立即暂时当前的任务而发起请求,这称为同步;当该任务将请求的时间安排到某任务完成之后再发起,这称为异步。当发起请求时,直至获得完整的资源之后,不会继续执行现在或之后的任务,这称为阻塞;当发起请求时,立即获得瞬时的结果,然后继续执行现在或之后的任务,如果获得的瞬时资源不是完整的资源,将之后周期性发送类似的请求,直至获得完整的资源,这称为非阻塞。

      可以看出,同步与异步的区别在于发起请求的时机,而阻塞与非阻塞的区别在于发起请求后是否对本线程进行暂停。

    同步阻塞、同步非阻塞、异步阻塞、异步非阻塞

      很多读者(包含笔者)都喜欢作者能直截了当地给出概念,而反感拐弯抹角和旁敲侧击。因此,笔者再提炼一下本文核心的四个概念:

    • 同步阻塞:在需要某资源时马上发起请求,并暂停本线程之后的程序,直至获得所需的资源。

    • 同步非阻塞:在需要某资源时马上发起请求,且可以马上得到答复,然后继续执行之后的程序。但如果得到的不是完整的资源,之后将周期性地的请求。

    • 异步阻塞:在需要某资源时不马上发起请求,而安排一个以后的时间再发起请求。当到了那时发出请求时,将暂停本线程之后的程序,直至获得所需的资源。

    • 异步非阻塞:在需要某资源时不马上发起请求,而安排一个以后的时间再发起请求。当到了那时发出请求时,可以马上得到答复,然后继续执行之后的程序。但如果得到的不是完整的资源,之后将周期性地的请求。


    【提醒】

      有些过分钻研概念的极客可能会对此提出质疑:既然“不马上发起请求”属于异步,但是如果一个线程将 CPU 分配的时间片用完了,此时应该得不到执行,那么同步非阻塞是不是可以归于异步非阻塞呢?

      实际上不是这样。一方面,这里的“马上执行”,指的是针对这个程序中相关的代码而言的。基于上一条代码而执行的下一条代码就称为“被马上执行的代码”,而不管这两条代码的执行之间有没有被 CPU 中断。另一方面,评判 同步非阻塞异步阻塞 的其中一个标准是,如果一个主线程中,依次调用了 N 个 同步非阻塞 的方法,则这些方法被执行的次序是不确定的。但如果一个主线程中,依次调用了 N 个 异步阻塞 的方法,则当主线程完成当前的任务之后,转而真正执行这些异步方法时,这些方法被执行的次序与之前调用时一致。


    一个生动的例子

      一个贴切生动的例子可能对理解更有帮助。这里假设了这样的一种情景:笔者正在进行公司安排的一个“cleancode”专项需求(下面简称 cleancode 专项),然后突然对于门禁上报告的一项告警不太理解,笔者想要求助自己的同事(设该同事名为 Bob),于是在公司的通信软件(设该软件名为 contact)上向其发送了此求助消息,并假设笔者每天有减脂的诉求,因此在下午下班后不会立刻去吃饭。

      前述的四个概念类比如下:

    • 同步阻塞:笔者在 contact 上给 Bob 发了一条咨询信息,并开启 contact 的消息自动弹出功能。然后笔者暂停手头的工作,翘着二郎腿开始用手机摸鱼,直到手机上弹出 contact 的关于 Bob 的回复信息。

      解释:

      • 笔者、笔者的同事 Bob:两个位于不同服务器上的操作系统。

      • cleancode 专项:正在“笔者操作系统”上运行的一个线程。

      • 笔者放弃工作上的任务:cleancode 专项线程被阻塞。

      • 笔者开始摸鱼:cleancode 专项线程因阻塞而使笔者空闲,笔者通过调度来运行其它无关线程。

      • contact 的消息自动弹出:在操作系统中,用于唤醒阻塞线程的信号量。

    • 同步非阻塞:笔者在 contact 上给 Bob 发了一条咨询信息,然后笔者继续做 cleancode 专项中的其它内容,并周期性查看 Bob 有没有回复。

    • 异步阻塞:笔者在日程表上记录了这个待办事项,然后笔者继续做 cleancode 专项中的其它内容,最后到下午下班时,笔者在 contact 上给 Bob 发了一条咨询信息,并开启 contact 的消息自动弹出功能。然后笔者暂停手头的工作,翘着二郎腿开始在晚上加班时间用手机摸鱼,直到手机上弹出 contact 的关于 Bob 的回复信息。

    • 异步非阻塞:笔者在日程表上记录了这个待办事项,然后笔者继续做 cleancode 专项中的其它内容,最后到下午下班时,笔者在 contact 上给 Bob 发了一条咨询信息,然后笔者继续加班做 cleancode 专项中的其它内容,并周期性查看 Bob 有没有回复。

    总结与补充

    • 用一句话概括本文的概念:

      • 异步:把事情推到以后去做

      • 阻塞:专心做一件事情

      • 同步非阻塞:一边做一件事情,一边做另一件事情(一心二用)

      • 异步阻塞:把问题推到以后专心处理

      • 同步阻塞:马上专心做一件事情

      • 异步非阻塞:把问题推到以后时不时处理一下

    • 线程在被阻塞时,CPU 会将时间片分给其它线程。而当线程发出非阻塞线程请求时,它以后还要周期性地请求,这同样会占用 CPU 时间。因此,不能一味地认为异步非阻塞一定优于同步非阻塞。同样是异步非阻塞,底层实现不同,效率也不同。将程序中的所有代码都改成异步非阻塞,也未必可以提高系统的整体性能。哪种性能最好要取决于具体实现,而不是几个用于装蒜的术语。

    • Java 中没有异步关键字,所以一般情况下,Java 代码都是同步的,Java 中只有同步阻塞和同步非阻塞。但异步代码可以通过同步代码设计出来,所以 Java 中也可以设计出异步方法。

      JavaScript 有异步关键字,但 JavaScript 是单线程的,所以 JavaScript 中只有同步阻塞和异步阻塞。

    • 我们平常单独使用的“同步”一词,实际上指的是这里的同步阻塞,而“异步”指异步非阻塞。

    • 在操作系统层面,只有单独的同步与异步、阻塞与非阻塞的说法。此时的同步与异步的含义主要有以下几个:

      • 同本文的同步阻塞、异步非阻塞。

      • 同步:强调两个程序的运行彼此有逻辑、时间上的先后关系。

        异步:强调两个程序的运行彼此相对独立。

    展开全文
  • 异步、同步、阻塞、非阻塞的说明解释,用于深入理解。
  • 本文主要讲了IO中同步、异步与阻塞、非阻塞区别。希望对你的学习有所帮助。
  • 主要介绍了java 同步、异步、阻塞和非阻塞分析的相关资料,需要的朋友可以参考下
  • 主要介绍了详解socket阻塞与非阻塞同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
  • 异步:非阻塞式调用,立即返回,调用方无需等待响应方返回实际结果,响应方会通过状态、通知或回调来告知调用方 异步调用场景: 1.耗时任务:主线程中提交耗时任务到线程池,然后通过Feture来异步获取任务执行
  • 之前一直把异步和非阻塞混为一谈,在 了解BIONIO的...2.同步/非同步和阻塞/非阻塞区别: https://blog.csdn.net/qq_35503998/article/details/82835517 这篇将的比较中肯 3.BIONIO的区别: https://zhuanlan.zh

    之前一直把异步和非阻塞混为一谈,在 了解BIO和NIO的区别时才发现了两者的差异,看了网上很多文章觉得说的总是差点意思,下面是个人理解:

    1.同步 非同步 阻塞 非阻塞 概念

    怎样理解阻塞非阻塞与同步异步的区别? - 知乎

    2.同步/非同步和阻塞/非阻塞的区别:

    同步 异步 阻塞 非阻塞 区别_流水随波落花逐流的博客-CSDN博客_同步异步阻塞非阻塞

    这篇将的比较中肯

    3.BIO和NIO的区别:

    快速掌握NIO和BIO有何不同? - 知乎

    总结:

    注意: 异步必定是非阻塞的,所以不存在异步阻塞和异步非阻塞的说法。

    1>同步:

    主要指的是多个工作之间的协同,比如多个线程之间的协同,比如线程B需要等到线程A执行完,拿到线程A的结果线程B才能开始工作。这两个线程之间就是同步的。

    2>同步阻塞/同步非阻塞:  

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

    方法B需要用到方法A的执行结果,比如这里是同步阻塞,在方法A中,执行到

    (User) objectInputStream.readObject();对于同步阻塞来说,线程会停下来等待socket接收到数据才会往下运行,而对于同步非阻塞来说,方法A里的代码都执行过了,但是他不等待通信结果的返回,而是直接往下执行,这时候执行到方法B时,a==null就会抛出异常,这明显不是我们所想要的结果。

    3>异步

    同步和异步关注的是消息通信机制 

    这里主要疑惑的地方在于: 同步非阻塞和异步的区别:

    比如下段代码分别采用同步非阻塞和异步去执行,

    对于同步非阻塞: 当线程执行到方法B之后,什么时候socket通信返回结果线程是不清楚的,只能本线程去隔段时间去访问查看是否得到结果。

    对于异步: 当线程执行到方法B之后,当socket通信返回结果后,会通知线程结果返回了比如有回调函数之类的通知本线程。

    public static Integer A(){
        ...
    //socket通信
       Socker socket=new Socker(...);
       ObjectInputStream objectInputStream=new ObjectInputStream(socket.getInputStream()
        User user= (User) objectInputStream.readObject();
        int res=user.getAge();
     
       ....
       return res;
    };
    
    public static Integer B(Integer a){
    
                if(a==null)
                  {
                     throw new RuntimeException("a is null");
                  }
                ...
    };
    
     public static void main(String[] args) {
           Integer a=A();
           Integer b=B(a);
        }

    4>放在BIO和NIO中进一步理解

    对于使用NIO进行socket通信,编码非常麻烦,就比如需要等待通信结果

    //代码不全 大概理解这段代码是sc.read(buf);会接收远程发送过来的数据
    
    public void testAccept() throws Exception{
    	//创建服务器端的服务通道
    	ServerSocketChannel ssc = 
    			ServerSocketChannel.open();
    	//绑定端口号
    	ssc.bind(new InetSocketAddress(8888));
    	//设置非阻塞模式
    	ssc.configureBlocking(false);
    	//调用accpet方法获取用户请求的连接通到
    	SocketChannel sc = ssc.accept();
    	System.out.println("有连接连入");
        ByteBuffer buf = ByteBuffer.allocate(10);
        sc.read(buf);
        System.out.println("有数据读入:"+buf.toString());
    }

    不运行客户端,直接运行服务器,会发现输出 “有连接接入”,但是发现在sc.read(buf)行抛出了空指针异常。buf对象不可能为null,所以sc为null.

    将SocketChannel sc = ssc.accept();改为:

    while(sc==null){
    	sc = ssc.accept();
    }

    再次运行testAccept()方法,空指针的问题解决了;然后再运行testConnect()方法,发现连接能够正常建立,但是“有数据读入了。。”并没有输出,说明即使ssc服务通道设置了非阻塞,也没有改变得到的通道sc默认为阻塞模式,所以sc.read(buf)阻塞了。要不想让read()方法阻塞,需要在调用read()之前加sc.configureBlocking(false);这样即使没有读到数据,“有数据读入了。。”也能打印出来。

    5>同步阻塞和非阻塞在NIO的实例对比:

     

     非阻塞模式: 对于上面的场景,线程不会阻塞在read,会一直循环,可以一致处理用户连接请求,等客户端发送过来数据的话,如果允行到read()就会处理发送过来的数据,非阻塞模式下,因为这里设置乐循环,该线程会一直在这里循环这段代码,等运行到read()就处理客户端过来的数据,如果运行到accept()就会处理传过来的连接请求。

          前面所讨论过,同步非阻塞和异步的区别就是,同步非阻塞需要自己打电话去询问是否书籍有货,这里的循环,当线程在循环中再次运行到accept()或read()就相当于询问是否有货,而异步的话就会通过回调函数等题型线程书籍到货。

     

    测试代码: 阻塞和非阻塞的代码唯一区别是,设置 sc.configureBlocking(false); // 非阻塞模式,可以自行测试

    // Server
    public class SocketServer {
    
    
        private static final Logger logger=  LoggerFactory.getLogger(SocketServer.class);
        public void start() throws IOException {
            ServerSocketChannel ssc=ServerSocketChannel.open();
            ssc.bind(new InetSocketAddress(7788));
            ByteBuffer buffer=ByteBuffer.allocate(16);
            List<SocketChannel> channels=new ArrayList<>();
            ssc.configureBlocking(false); // 非阻塞模式
            while (true)
            {
    
                SocketChannel sc= ssc.accept();
                logger.info("等待客户端连接");
                if (sc!=null)
                {
                    logger.info("客户端连接建立: "+sc.getRemoteAddress());
                    sc.configureBlocking(false); // 非阻塞模式
                    channels.add(sc);
                }
                for (SocketChannel channel:channels)
                {
    
                    int read=channel.read(buffer);
                    if (read>0)
                    {
                        logger.info("接收客户端数据: "+sc.getRemoteAddress());
                        buffer.flip();
                        // ByteBufferUtil.debugRead(buffer);
                        buffer.clear();
                    }
                }
            }
        }
    
        public static void main(String[] args) throws IOException {
            SocketServer socketServer=new SocketServer();
            socketServer.start();
        }
    }
    
    
    //Client
    public class SocketClient {
        static Logger logger= LoggerFactory.getLogger(SocketClient.class);
        public  void start() throws IOException {
            SocketChannel sc=SocketChannel.open();
            sc.connect(new InetSocketAddress("localhost",7788));
    
            sc.write(ByteBuffer.wrap("Hello,Im ".getBytes()));
        }
    
        public static void main(String[] args) throws IOException {
            SocketClient sc=new SocketClient();
            sc.start();
        }
    }

    展开全文
  • 今天老师讲了同步阻塞 同步非阻塞 异步阻塞 异步非阻塞。讲完感觉老师自己说的都是前后矛盾的。去网上找了几篇大佬的博客,看完后才有点点感悟。特地小结记下来,若有错误之处,欢迎大家斧正。 首先先弄清楚同步...

    今天老师讲了同步阻塞 同步非阻塞 异步阻塞 异步非阻塞。讲完感觉老师自己说的都是前后矛盾的。去网上找了几篇大佬的博客,看完后才有点点感悟。特地小结记下来,若有错误之处,欢迎大家斧正。

    首先先弄清楚同步和异步 ,阻塞和非阻塞。

    1. 同步和异步(指的是消息)

    同步和异步描述的是消息通信的机制

    同步:

    一次调用,一次返回;整个过程就是同步调用的过程;

    特点:针对每次都是一次同步的调用;

    异步:

    调用后,没有得到想要的返回(或者不care返回值);而是通过后面的回调、状态通知的方式获得结果;

    特点:通过回调callback、状态或者通知的方式告知调用方结果;

    2. 阻塞和非阻塞 (指的是进程/任务)

    描述的是程序在等待调用结果(消息、返回值)时的状态

    阻塞:

    调用方线程在等待结果返回过程中,线程被挂起,(调用方不能处理其它事情)等结果返回后,唤醒线程;

    特点:调用方被阻塞

    非阻塞:

    调用方线程在等待结果的过程中,线程没有被挂起,(可以处理其它事情)

    特点:调用方没有被阻塞

    这里的关系就像水火和冷热一样,是两组不同的相对概念。但是第一反应水是冷的,火是热的。其实呢开水温度也有100度,鬼火(磷火)也只有40度。

    老师以前叫promise和async时经常说同步要等它执行完,异步就可以不用管。导致和后面学的阻塞与非阻塞产生歧义。

    同步异步只是指消息通知给调用方的方式(被动查看,主动返回),阻塞和非阻塞才是等待任务进程调用结果(消息、返回值)时的状态。

    通俗的用最近去医院来举例

    同步阻塞

    去医院挂号,医院的提示铃声坏了,你怕错过什么事也不做(阻塞)一直紧紧盯着当前的就诊号消息(同步)。这叫同步阻塞,时间利用率低


    同步非阻塞 

    也是去医院的提示铃声坏了,你看着人多便开始刷剧(非阻塞)但是也时不时看一下当前的就诊号消息(同步)。这叫同步非阻塞,时间利用率较高。


    异步阻塞

    医院的提示铃声修好了,到一定时间它自己会广播提示(异步)。但是你也什么也不做也不看当前就诊信息,就发呆(阻塞)。这叫异步阻塞,效率和同步阻塞没什么两样,时间利用率低。


    异步非阻塞

    医院的提示铃声修好了,到一定时间它自己会广播提示(异步)。但是你这个时间坐下来看小说,打游戏,刷b站(非阻塞)。没有不刻意查看当前就诊号。这叫异步非阻塞,时间利用率高。

    同步是需要自己主动查询任务状态获取信息,异步是任务自己返回结果给调用方。调用方不必主动查询。阻塞就是等待。

    版权声明:本文为参考CSDN博主「安心写bug」的原创文章后的总结,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/qq_36963372/article/details/83353017

    展开全文
  • 常规的误区 ... ...  这个时候你问别人,刚刚代码发起的这个请求是不是一个同步请求,对方一定回答是。这是对的,它确实是。...对方一定是这样回答的,“因为发起... 不是因为代码卡住不动了才叫同步请求,而是因为它是同步
  • 同步阻塞、同步非阻塞、异步区别

    千次阅读 2021-02-07 10:22:14
    非阻塞:线程发送请求后,不等待数据,通过轮询/信号量等方式去获取数据是否准备好。 2、将数据从内核复制到用户空间: 同步:线程自己把数据从内核复制到用户空间,期间不能做其它事情,一直等待数据复制完毕。...
  • 主要介绍了科学知识:同步、异步、阻塞和非阻塞区别,本文分别讲解了这些概念,需要的朋友可以参考下
  • 同步和异步,阻塞和非阻塞区别
  • 简单理解什么是同步阻塞/同步非阻塞,异步阻塞/异步非阻塞 举个栗子 1、你在家做饭,用普通的汤锅,米放进去,就站在锅边,傻等饭熟。——这叫同步阻塞 是不是觉得浪费了大量的时间,于是你想提高时间的利用效率。 2...
  • 同步和异步,阻塞和非阻塞是大家经常会听到的概念,但是它们是从不同维度来描述一件事情,常常很容易混为一谈。 1. 同步和异步 同步和异步描述的是消息通信的机制。 同步 当一个request发送出去以后,会得到一个...
  • 非阻塞( Nonblocking) 同步异步关注的是通信方式,同步是得到结果后才返回调用。异步则是在调用发出后直接返回,通过其他方式告知结果。 阻塞是你收到结果前你啥都干不了,非阻塞则可以干其他事同时关注结果。 同步...
  • 同步异步以及阻塞和非阻塞区别

    千次阅读 2017-12-06 17:19:04
    一、同步与异步的区别同步和异步的理解同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,这是一种可靠的服务序列。要么成功都成功,失败都失败,服务的状态可以保持一致。异步:一...
  • 但在这当中,发现一些概念区分起来很难,比如并发并行,同步和异步,阻塞和非阻塞,但是这些概念却很重要。因此在此把它总结下来。并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间...
  • 一、同步和异步 同步和异步是一种 消息通知机制 同步:发出一次请求后必须等到该请求有返回结果,才能继续下一步工作;请求者需主动询问是否有返回结果; 异步:发出一次请求后无需等到该请求有返回结果,即可进行...
  • 来源: 睡到自然醒 文章作者: 睡到自然醒 ...本文章著作权归作者所有,任何形式的转载都请注明出处。 同步和异步 同步(Synchronization)异步(Asynchronous)的方式...同步方式在处理IO事件的时候,必须阻塞在某个方法上.
  • 同步阻塞异步非阻塞 阻塞非阻塞针对于调用者,同步异步针对于被调用者,两两结合,共有四种状态,即 同步阻塞 同步非阻塞 异步阻塞 异步非阻塞 接下来用一个例子来形容一下四者的区别,如图 因为 js是单线程...
  • 同步、异步:概念:消息的通知机制解释:涉及到IO通知机制;所谓同步,就是发起调用后,被调用者处理消息,必须等处理完才...阻塞、非阻塞:概念:程序等待调用结果时的状态解释:涉及到CPU线程调度;所谓阻塞,就是...
  • 五分钟掌握同步异步I/O同步阻塞同步非阻塞异步阻塞异步非阻塞网络通讯原理网络通讯的过程I/O阻塞I/O模型非阻塞I/O模型多路复用I/O模型信号驱动I\O模型异步I/O模型易于混淆的概念各I/O模型的对比与总结BIO、NIO、AIO ...
  • 同步非阻塞) 老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。 3 老张把响水壶放到火上,立等水开。(异步阻塞) 老张觉得这样傻等意义不大 4 老张把响水壶...
  • 同步、异步与阻塞、非阻塞的理解

    千次阅读 2020-07-23 11:03:31
    一、同步、异步与阻塞、非阻塞 同步和异步都是基于应用程序所在操作系统处理IO事件所采用的方式,同步是应用程序要直接参与IO读写的操作。异步所有的IO读写交给搡作系统去处理,应用程序只需要等待通知。 网上有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 266,141
精华内容 106,456
热门标签
关键字:

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