






















IO指的是输入输出,在Linux操作系统中,共有5种IO模型,分别是:
Linux I/O的数据处理,存在两个阶段:
阻塞I/O模型,等待数据和拷贝数据的过程,都是阻塞的

非阻塞I/O模型,会采用while不断尝试数据读取,没有读到数据立刻返回false,读到了就结束while,将读到的数据从内核缓冲区拷贝到用户空间中,其中while过程非常快,因此不会阻塞

多路复用I/O模型,类似阻塞I/O,不同的是用了两次系统调用,也是尝试读取数据,等准备好后再拷贝到用户空间,不同于Blocking I/O,I/O multiplexing基于Linux的select调用,多个线程的IO可以注册在一个管道上,统一和内核交互,哪个数据准备好了,就把哪一个的数据复制到用户空间。

信号驱动的I/O模型,是非阻塞的,发起sigaction系统调用后,立刻返回,等数据读取完成后,Linux系统会主动发送一个sigio的信号给进程,进程监听到信号后,再去调用系统调用获取数据。

异步I/O模型,和Signal driven I/O很像,不同的是将IO请求发送给内核后,完全由内核完成拷贝,内核完成操作后,会告诉进程拷贝已完成。

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。