{ IO }

  • AIO in C

    |

    AIO, 即异步非阻塞I/O,允许了包括I/O与处理计算的重叠。在大量并发任务下,理论上可以提高相应的处理计算性能。在此简单记录一下C语言中的AIO,方便后续有需要时候查询。

  • Synchronous vs. Asynchronous, Blocking vs. Non-Blocking I/O

    |

    背景

    在Unix环境下,有5种基本的I/O模型:

    • blocking I/O
    • nonblocking I/O
    • I/O multiplexing (select and poll)
    • signal driven I/O (SIGIO)
    • asynchronous I/O (the POSIX aio_ functions)

    对于一个操作I/O的程序来说,首先,程序会由用户态向内核发出请求,由内核态去对相关的硬件进行交互。在数据已经准备完毕后,再由内核拷贝到相应的进程中。这是一个两段执行的过程。

    假设我们目前进行的是Network I/O,我们用Socket去进行数据的读取。首先,我们会等待数据达到我们的网络设备,当数据到达以后,它将会被存储在内核的缓存中。然后,这个数据会从内核的缓存中拷贝到程序的缓存中,以供使用。