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

IO分类

  1. BIO
    同步阻塞IO,服务器实现模式为一个连接一个线程。试用于连接数少,带宽要求高时.同步是一种消息通信机制,阻塞非阻塞是一种程序在等待调用结果的一种状态。
  2. NIO
    同步非阻塞,一个线程对应多个连接,一个请求对应一个线程。当连接数多而且短时,比如聊天室,可以用这个。
    IO 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
IO NIO
BIO
IO NIO
reactor主从模型,也是netty默认的模型
IO NIO

相关文章:

  • 2021-05-18
  • 2021-06-04
  • 2021-06-26
  • 2022-03-11
猜你喜欢
  • 2021-09-16
  • 2021-09-22
  • 2021-09-27
  • 2021-10-30
  • 2021-07-02
相关资源
相似解决方案