JAVA中的NIO、BIO、AIO

18 篇文章 0 订阅
1 篇文章 0 订阅

IO主要包括:TCP、UDP、文件IO

以下模型中的非阻塞多路复用异步只针对网络IO,和文件IO无关


UNIX五种IO模型

1、阻塞式IO模型

应用进程发送IO系统调用(recvfrom),然后等待数据到达,直到数据到达才返回,不然就一直处于等待状态;

https://i-blog.csdnimg.cn/blog_migrate/c59ec7b7d0f1653815dec64ec9831b1a.jpeg

2、非阻塞式IO模型

应用进程发起IO系统调用,如果没有数据,也不会阻塞应用进程,而是告诉应用进程晚点再来,然后应用进程一直轮询,直到返回数据;

https://i-blog.csdnimg.cn/blog_migrate/bb52ec36f1790f2301cec5f92512ebc1.jpeg

3、IO复用模型

使用select或者是epoll这种函数来代替IO系统调用,select这种操作可以去检查数据是否到达,并且可以同时发起多个,当select检查到数据到达时,应用进程再发起IO系统调用

https://i-blog.csdnimg.cn/blog_migrate/300ba14cad8b7cc95a664f3b0495ef28.png

4、信号驱动式IO模型

应用进程发送signaciton系统函数代替IO系统调用,这个函数会立即返回,当有数据到达时,系统内核会递交SIGIO信号给应用进程,应用进程再发起IO系统调用

https://i-blog.csdnimg.cn/blog_migrate/9c80141d49aa6a0141220881a816a137.jpeg

5、异步IO模型

以上几种模型还都是同步模型,每次发起IO调用,还都要等待数据拷贝完成,异步IO模型只要应用进程向系统内核发起aio_read操作,然后立即返回,数据到达后,系统内核会根据aio_read发起的参数自动拷贝数据到用户空间

https://i-blog.csdnimg.cn/blog_migrate/0c6515a5b5a6d8748cfd9c30eb3afb26.jpeg


BIO——同步阻塞IO

每个线程去处理一个网络IO请求,数据没到达,就一直阻塞等待


NIO——同步非阻塞IO

  1. 与传统IO优势:
    1. 面向Buffer
    2. 双向(Buffer读写)
    3. 非阻塞
    4. 多路复用
  2. 核心原理:
    1. Selector:多路复用选择器,监控Channel的IO状况;
    2. Channel:管道节点的连接与数据运输;
    3. Buffer:数据读写操作发生区域;

http://ifeve.com/wp-content/uploads/2013/06/overview-selectors.png

Channel需要向Selector注册,单个线程调用Selector的select方法来监听多个Channel;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值