看到知乎上一篇回答,解决了疑惑:https://www.zhihu.com/question/56673416 第三位作者的回答...原谅我没有登录知乎,不然一定给他留赞.

也可以参考:https://blog.csdn.net/baixiaoshi/article/details/48708347

https://blog.csdn.net/zccracker/article/details/38686339

很多人的解释都是扯在一起的,反而让人觉得晕乎乎的,或者他们自己也没真正的搞懂....

这个模型的前提是 clint端发请求,,然后分析时就没clint啥事了,有些人说客户端阻塞...所有模型中Clint不都是阻塞的么,这是http协议呀,必须有返回!!主要是针对server进行模型分析.

阻塞和非阻塞区分:请求id的线程是否是阻塞的状态

同步异步的区分:数据是去内核buffer还是进程buffer去取以及是否是通知进程还是进程自己去查询.(这里涉及到用户线程和内核线程的知识.)

结合java

bio 同步阻塞:

       ServerSocket serverSocket = new ServerSocket(10101);
while (true){
//获取一个套接字(阻塞)
final Socket socket = serverSocket.accept();
//开个线程,处理连接的clint socket...
new
}

  套用上面的区别,,此时接受客户端连接的线程(请求线程),一直处于阻塞状态,等待客户端连接(阻塞),每个clint 连接后分配一个线程(用户线程(进程线程))(同步)------>同步阻塞

nio同步非阻塞:

 SocketChannel serverChannel = SocketChannel.open();
selector = Selector.open();
serverChannel.socket().bind(new InetSocketAddress(8080));
serverChannel.configureBlocking(false);
serverChannel.register(selector, SelectionKey.OP_ACCEPT); Set<SelectionKey> sleSet = selector.selectedKeys();
while (true) {
int count = selector.select();
Iterator<SelectionKey> iterator = sleSet.iterator();
while (iterator.hasNext()) { SelectionKey selectionKey= iterator.next();
Buffer buffer=ByteBuffer.allocate(1024);
if(selectionKey.isAcceptable()){
ServerSocketChannel socketChannel=(ServerSocketChannel) selectionKey.channel();
//处理逻辑,开线程 }else if(selectionKey.isReadable()){ }else if (selectionKey.isWritable()){ }
iterator.remove();
} }

  分析;  selector.selectedKeys() 一直轮询着,,如果事件处理很费时间,依旧是阻塞的,,,也需要要开线程去异步处理,保证请求的主线程不被阻塞,达到非阻塞目的,所以它可以被设计成阻塞的,也可以被设计成非阻塞的,,他也是基于进程线程的读写,所以属于同步---->综上可得到他是同步非阻塞

aio异步非阻塞:

封装的比较狠,,展示不出效果..基于事件的回调,,future/callback,,,大概的过程是操作系统内核线程处理完,通知进程线程拿到结果,期间进程线程可以做其他的事情,这样做的好处是充分利用操作系统的并发能力.

///以上内容只为加深下理解...感觉解释得通

java 中AIO,BIO,NIO的区别(茅塞顿开)的更多相关文章

  1. JAVA中的BIO,NIO,AIO

    在了解BIO,NIO,AIO之前先了解一下IO的几个概念: 1.同步 用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪, 例如自己亲自出马持银行卡到银行取钱 2.异步 用户触发IO操作以后, ...

  2. 京东数科二面:常见的 IO 模型有哪些?Java 中的 BIO、NIO、AIO 有啥区别?

    IO 模型这块确实挺难理解的,需要太多计算机底层知识.写这篇文章用了挺久,就非常希望能把我所知道的讲出来吧!希望朋友们能有收货!为了写这篇文章,还翻看了一下<UNIX 网络编程>这本书,太 ...

  3. 京东数科面试真题:常见的 IO 模型有哪些?Java 中的 BIO、NIO、AIO 有啥区别?

    本文节选自<Java面试进阶指北 打造个人的技术竞争力> 面试中经常喜欢问的一个问题,因为通过这个问题,面试官可以顺便了解一下你的操作系统的水平. IO 模型这块确实挺难理解的,需要太多计 ...

  4. IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别参考

    参考https://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral IO复用,AI ...

  5. AIO,BIO,NIO,IO复用,同步,异步,阻塞和非阻塞

    (1)什么是NIO(Non-blocked IO),AIO,BIO (2) 区别 (3)select 与 epoll,poll区别 1.什么是socket?什么是I/O操作? 什么是socket? 实 ...

  6. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  7. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  8. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  9. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

随机推荐

  1. 廖雪峰Java3异常处理-1错误处理-2捕获异常

    1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常 可能发生异常的语句放在try{... ...

  2. OpenStack单节点制作镜像

    1.创建快照 已修改后的时刻为记录,进行制作镜像,选择要制作镜像的虚拟机,点击创建快照,在所弹出的对话框中输入所创建的镜像名称 生成了一个镜像,类型为Snapshot 2.保存镜像 查看镜像列表 [r ...

  3. css属性—position的使用与页面的分层介绍

    一.引言: 在css众多属性中,position算是里面用的比较多也相对来说比较重要的属性了,它对于单个标签的“定位”.标签之间的“相对位置定位”还有网页的分层来说十分重要! 二.“定位的实现”具体介 ...

  4. mysql命令行批量插入100条数据命令

    先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...

  5. WAV和PCM的关系和区别

    什么是WAV和PCM? WAV:wav是一种无损的音频文件格式,WAV符合 PIFF(Resource Interchange File Format)规范.所有的WAV都有一个文件头,这个文件头音频 ...

  6. 第8章 传输层(2)_UDP协议

    2. 用户数据报协议(UDP) 2.1 UDP的特点 (1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延. (2)UDP使用了尽最大努力交付,即不保证可靠交付,因 ...

  7. mysql中min和max查询优化

    mysql max() 函数的需扫描where条件过滤后的所有行: 在测试环境中重现: 测试版本:Server version:         5.1.58-log MySQL Community ...

  8. [python] 初学python,打卡签到

    自学python第一周,学了变量和简单的条件判断. 附上猜数游戏代码 #Author:shijt trueAge=40 count=0 while count<3: guessAge=int(i ...

  9. 微信小程序开发踩坑日记

    2017.12.29  踩坑记录 引用图片名称不要使用中文,尽量使用中文命名,IDE中图片显示无异样,手机上图片可能出现不显示的情况. 2018.1.5  踩坑记录 微信小程序设置元素满屏,横向直接w ...

  10. rsyncd

    rsync是一个快速.通用的文件复制工具.支持两种工作模式:基于shell的传输.基于服务的传输.1.配置文件 rsyncd.conf文件由模块及其参数构成.模块由方括号包裹模块名称,直到下一个模块结 ...