IO操作步骤
(1)发起IO请求:IO请求一般需要请求特殊资源(如磁盘、RAM、文件、网络),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。
(2)实际IO操作:真正进行数据接收(数据复制)。
IO分类
步骤1(发起IO请求):分为阻塞IO和非阻塞IO,区别主要是看发起IO请求是否阻塞进程。
1、应用程序调用后,不能立即返回的称为阻塞IO,即资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。
2、能立即返回的称为非阻塞IO,资源不可用时,IO请求离开返回,返回数据标识资源不可用。
步骤2(实际IO操作):分为同步IO与异步IO,区别主要看实际IO操作是否阻塞进程。
1、在将数据从内核拷贝到用户空间时,将数据拷贝到应用缓冲区期间是否阻塞,也就是说,如果实际IO读写阻塞请求进程(应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败),那么就是同步IO。
2、如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你(应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用),那么就是异步IO。
前4种属于同步IO,最后一种才是异步IO。虽然(2)(3)(4)种IO是非阻塞IO,但其实也只是同步非阻塞,不能算异步