IO NIO

  • IO分类
  • IO/NIO基本知识汇总
  • select epoll
  • BIO,NIO,reactor主从模型

IO分类

  1. BIO
    同步阻塞IO,服务器实现模式为一个连接一个线程。试用于连接数少,带宽要求高时.同步是一种消息通信机制,阻塞非阻塞是一种程序在等待调用结果的一种状态。
  2. NIO
    同步非阻塞,一个线程对应多个连接,一个请求对应一个线程。当连接数多而且短时,比如聊天室,可以用这个。
    这里写图片描述
  3. AIO
    异步非阻塞,适用于连接数多而且长的情况.服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
    不需要过多的Selector对注册的通道进行轮询即可实现异步读写,从而简化了NIO的编程模型。
    在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。

IO/NIO基本知识汇总
IO是面向流的,也就是说一次只能取出一个,NIO是面向缓冲区的,能移动缓冲区取数据。
聊天服务器,用NIO来实现这个服务器是有优势的,这个聊天室中thread是通过一个selectors连接多个channel。要使用Selector的话,我们必须把Channel注册到Selector上,然后就可以调用Selector的select()方法。这个方法会进入阻塞,直到有一个channel的状态符合条件。当方法返回后,线程可以处理这些事件。
而每个链接的占用较大带宽,每次都要发送大量数据IO有优势:

select epoll
在IO多路复用的情况下,对于高并发的请求中但是活跃比较少的IO,linux的epoll有比较高的性能,因为他是从那些IO中把活跃IO拿到一个队列里去,这样遍历队列里面的元素就可,毕竟这里面的IO都是主动调用,被唤醒的都是,所以是活跃IO。 而select是采用轮询方式去查看整个IO的。
还有阻塞IO,非阻塞IO 大部分时间都是不可读的,要花很大时间进行不断重复的read系统调用,异步IO 一个符号还好,多个就不合适了

BIO,NIO,reactor主从模型
NIO
这里写图片描述
BIO
这里写图片描述
reactor主从模型,也是netty默认的模型
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值