本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, asynchronous IO的基本原理,更好的理解在高级语言中的异步编程,一起来看看吧,希望对大家学习linux有所帮助。
写在前面
为了更好的理解下面提到的Linux下5种网络IO的概念,我们还是有必要先理清几个概念。
1.程序空间与内核空间
在Linux中,对于一次读取IO的操作,数据并不会直接拷贝到程序的程序缓冲区。它首先会被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的缓冲区。p.s: 最后一句话非常重要,重复一遍。
1. Waiting for the data to be ready(等待数据到达内核缓冲区)
2.Copying the data from the kernel to the process(从内核缓冲区拷贝数据到程序缓冲区)
2.阻塞与非阻塞
阻塞就是说我们某一个请求不能立即得到返回应答,否则就可以理解为非阻塞。
3.同步IO与异步IO
这里先直接引用Stevens(POSIX)在Unix网络编程中的定义:
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes.