Unix/Linux上的五种I/O模型
I/O模式是操作系统上任何的I/O,内存I/O,磁盘I/O,网络I/O都可以应用。
我们主要考虑网络I/O。
1、同步阻塞 blocking
同步的阻塞的I/O模型,效率不高。
内核空间就是网络接收到远端发送过来数据的tcp接收缓冲区。
应用进程调用read,系统调用,是系统的I/O接口。
在应用进程看来,是一直阻塞住,数据是否就绪、数据就绪后的从内核空间向用户空间的拷贝整个过程,应用程序时间都要在read上花费完,一直阻塞住。
应用程序调用read这个I/O接口,内核把这一系列事情做完以后,然后再唤醒当前这个应用线程,可以起来处理数据了。
这就是同步的阻塞I/O了。
2、同步非阻塞 non-blocking
同步非阻塞模型。
- 当应用进程调用read之前,用setsockopt这个系统的方法把用socket创建的sockfd设置成非阻塞&#