Linux网络I/O模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux网络I/O模型相关的知识,希望对你有一定的参考价值。

一、用户空间I/O操作的两个阶段

1、等待数据准备阶段

    此阶段主要是将数据先加载至内核空间(内存缓冲区)

2、数据从内核复制到进程的阶段

    此阶段主要是将数据从内核空间(内存缓冲区)复制到用户空间中进程的内存中去


二、五种网络I/O模型

1、Blocking I/O,阻塞 I/O

2、Non-blocking I/O,非阻塞 I/O

3、I/O multiplexing,多路复用 I/O

4、Asynchronous I/O,异步 I/O

5、Single driven I/O,信号驱动 I/O


三、Blocking I/O,阻塞 I/O

process blocks in call to read

                              (用户空间)                         (内核空间)

    wait for data : read (system call) --> no data ready --> data ready ==> blocking

                                                                      (内核空间)                                      (用户空间)

    copy data from kernel to user : copy data --> copy complete (return ok) -->  process data ==> blocking


四、Non-blocking I/O

process repeatedly calls read waiting for an OK (polling)

    wait for data : 

        (用户空间)                (内核空间)

        read (system call) --> no data ready

        read <--                     (ewouldblock)  # 如果数据没有准备好,则立即返回一个error

        read (system call) --> 

        read <--                     (ewouldblock)

        read (system call) --> data ready ==> non-blocking

                                                                      (内核空间)                                      (用户空间)

    copy data from kernel to user : copy data --> copy complete (return ok) --> process data ==> blocking


五、I/O multiplexing



以上是关于Linux网络I/O模型的主要内容,如果未能解决你的问题,请参考以下文章

网络编程笔记Linux系统常见的网络编程I/O模型简述

程序员必备:linux网络I/O+Reactor模型

Linux网络I/O模型简介

Linux网络I/O模型

linux下的网络I/O——转载

linux下的网络I/O——转载