Unix的5种IO模型
Unix系统有5种IO模型,这些IO模型的目的是为了提高服务器能够并行处理的连接数,而不是提高程序的执行性能。
- 阻塞IO:应用程序调用一个IO函数导致阻塞,在数据准备好前一直阻塞。
- 非阻塞IO:当所请求的I/O操作无法完成时,进程不休眠,轮询代替阻塞,在内核数据准备期间可以执行其他事情,但是不停轮询数据是否准备好所以会占用CPU较大资源。
- IO多路复用:用到select或poll函数,会导致进程阻塞
- 多个网络IO链接可以注册到一个复路器select上。
- 由一个进程或线程调用该复路器。
- 调用复路器会使进程或线程挂起,阻塞
- 内核轮询监视复路器上的每一个链接。
- 有一个连接的数据准备好了,该select返回,进程或线程退出阻塞状态
- 该进程或线程会进行系统调用,内核缓冲区的数据赋值到用户缓冲区。
- 信号驱动:在socket连接上安装一个信号处理函数,进程不阻塞,当数据准备好时,进程会收到一个信号,可以在信号处理函数中调用I/O操作函数处理数据。
- 异步IO:进程收到IO连接,发起aio_read系统调用,立即返回,进程不阻塞,继续执行。数据准备好以后,内核直接把数据从内核缓冲区复制到用户缓冲区,无需用户进程发起系统调用再复制。数据复制完以后返回指定信号给用户进程,用户进程可直接再用户缓冲区拿数据处理。
参考:https://blog.csdn.net/qq_40837310/article/details/106129120、https://blog.csdn.net/sunyubo458/article/details/6096723