5大io模型
- 阻塞式I/O模型(blocking i/o)
在阻塞式I/O模型中,应用程序在从调用recvfrom开始到它返回有数据报准备好这段时间是阻塞的,recvfrom返回成功后,应用进程开始处理数据报
2.非阻塞式I/O模型(non-blocking i/o)
在非阻塞式I/O模型中,应用程序把一个套接口设置为非阻塞就是告诉内核,当所请求的I/O操作 无法完成时,不要将进程睡眠,而是返回-一个错误,应用程序基于I/O操作函数将不断的轮询数据 是否已经准备好,如
果没有准备好,继续轮询,直到数据准备好为止
- I/O复用模型(i/o multiplexing)
在I/O复用模型中,会用到select或poll函数或epoll函数(Linux2.6以后的内核开始支持), 这两个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作,而且可以同时对多个读操作,多
个写操作的I/0函数进行检测,直到有数据可读或可写时,才填正调用I/O操作函数
- 信号驱动式I/O模型(signal-driven i/o)
由POSIX规范定义,应用程序告知内核启动某个操作,并让内核在整个操作( 包括将数据从内核拷贝到应用程序的缓冲区)完成后通知应用程序。这种模型与信号驱动模型的主要区别在于:信号驱动I/O是由内核通知应用程序何时启动一个I/O操作, 而异步I/O模型是由内核通知应用程序I/O操作何时完成
5.异步I/O模型(asynchronous i/o)
由POSIX规范定义,应用程序告知内核启动某个操作,并让内核在整个操作( 包括将数据从内核拷贝到应用程序的缓冲区)完成后通知应用程序。这种模型与信号驱动模型的主要区别在于:信号驱动I/O是由内核通知应用程序何时启动一个I/O操作, 而异步I/O模型是由内核通知应用程序 I/O操作何时完成