IO模型学习笔记

/ 技术文章 / 0 条评论 / 1060浏览

面试学习笔记1 - IO

IO

CPU保护模式(内核 kernal)

BIO,NIO, AIO

创建网络连接

  1. socket:创建socket连接,系统中生成新的fd
  2. bind:绑定端口,接受连接
  3. listen:监听端口的连接
  4. accept:接受请求的连接
  5. read:读取报文内容

BIO: Bloking IO

NIO:Non-Blocking IO

无多路复用

多路复用

Linux 中有下面几种多路复用器

AIO: Asynchronous IO

之前的几种IO模型,读取 read 无论如何都是同步的。AIO实现了非阻塞异步IO。但是AIO的使用并不广泛,只有Windows-IOCP能够实现。允许内核持有线程,拷贝数据到程序的内存空间。

零拷贝

原始的通信方式 read-write,频繁地系统调用及数据拷贝

  1. read: jvm向内核发送read命令
  2. read: kernal从文件中读取数据,数据读取至kernal
  3. read: kernal返回数据,数据从kernal拷贝至jvm
  4. write:jvm向内核发送write命令,将数据拷贝至kernal
  5. write:kernal将数据发送给socket,数据拷贝至socket fd

零拷贝,内核增加了 sendfile 方法,实现fd之间的数据交换

  1. sendfile: jvm向内核发送sendfile命令
  2. sendfile: kernal从文件中读取数据,数据读取至kernal
  3. sendfile:kernal将数据发送给socket,数据发送至socket fd