• 阻塞 、非阻塞;同步、异步


    同步、异步、阻塞、非阻塞都是和IO(输入输出)有关的概念。最简单的文件读取就是IO操作。而在文件读取这件事儿上,可以有多种方式。

    什么是同步和异步

    同步请求,A调用B,B的处理是同步的,在处理完之前他不会通知A,只有处理完之后才会明确的通知A。

    异步请求,A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,然后异步去处理,处理完之后通过回调等方式再通知A。

    所以说,同步和异步最大的区别就是被调用方的执行方式返回时机。同步指的是被调用方做完事情之后再返回,异步指的是被调用方先返回,然后再做事情,做完之后再想办法通知调用方。

    什么是阻塞和非阻塞

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

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

    所以说,阻塞非阻塞最大的区别就是在被调用方返回结果之前的这段时间内,调用方是否一直等待。阻塞指的是调用方一直等待别的事情什么都不做。非阻塞指的是调用方先去忙别的事情。

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

    首先,前面已经提到过,阻塞、非阻塞和同步、异步其实针对的对象是不一样的。阻塞、非阻塞说的是调用者同步、异步说的是被调用者

    有人认为阻塞和同步是一回事儿,非阻塞和异步是一回事。但是这是不对的。

    Java中的三种IO模型

    在Java语言中,一共提供了三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)、异步IO(AIO)。

    这里面的BIO和NIO都是同步的IO模型,即同步阻塞IO和同步非阻塞IO,异步IO指的是异步非阻塞IO。

    BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

    NIO (New I/O):同时支持阻塞与非阻塞模式,但主要是使用同步非阻塞IO。

    AIO (Asynchronous I/O):异步非阻塞I/O模型。

    举例:

    BIO (Blocking I/O):有一排水壶在烧开水,BIO的工作模式就是,叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。

    NIO (New I/O):NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。

    AIO ( Asynchronous I/O):为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了。

    Java中的IO还是借助操作系统的IO模型的,只不过是对操作系统IO模型的封装而已。

    更多精彩,微信扫一扫:

    原文:https://mp.weixin.qq.com/s?__biz=MzU4NzkwNTMzMg==&mid=2247483902&idx=2&sn=835c5edc9478a2d2e91575fcc302dfba&chksm=fde5a1a5ca9228b3d583d359e3d48e01d7b2296e924d6c10c426b8f01299923522c61bb3c995&mpshare=1&scene=23&srcid=&sharer_sharetime=1569287484750&sharer_shareid=570a2ed1c2a256d708a76b434f2d7246#rd

  • 相关阅读:
    JAVA基础:JAVA代码编写的30条建议
    Oracle学习之三 程序控制结构
    ExtJs 常用代码片段(7.30更新)
    ExtJs4 之数据模型
    .NET 大杂烩
    .NET 导出Excel
    Javascript实现IE直接打印
    C# Timer用法及实例
    AjaxPro实现无刷新多级联动实例
    VB6.0输入文本写进UTF8格式的文本文件
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/11576490.html
Copyright © 2020-2023  润新知