io,同步,异步,阻塞,非阻塞

io即读写

1,同步IO(同步):有数据时,recvfrom等待数据复制好是同步IO

2,阻塞IO(同步):没有数据时recvfrom也一直等待数据到来是阻塞IO

3,非阻塞IO(同步):recvfrom没有数据就不等,可以做别的事,不时检查有没有数据到来非阻塞IO

4,IO复用模型(同步):select调用数据(select的作用是有数据时可以告诉recvfrom)但只告知有数据了,数据在哪里还需要找一找,recefrom再调用数据就一定有数据(如果是用eopll调用,就可以直接知道数据在哪里)

5,信号驱动IO模型(同步):建立SIGIO信号处理程序,有数据时就可以递交SIGIO,等内核数据准备好的时候系统中断当前程序再recvfrom调用数据

6,异步IO模型:

调用aio_read,让内核等数据准备好,并且复制到用户进程空间后执行事先指定好的函数。E同学让舍管阿姨将杯子装满水后通知他。整个过程E同学都可以做别的事情(没有recv),这才是真正的异步IO。

 

总结

IO分两阶段:

1.数据准备阶段
2.内核空间复制回用户进程缓冲区阶段

一般来讲:阻塞IO模型、非阻塞IO模型、IO复用模型(select/poll/epoll)、信号驱动IO模型都属于同步IO,因为阶段2是阻塞的(尽管时间很短)。只有异步IO模型是符合POSIX异步IO操作含义的,不管在阶段1还是阶段2都可以干别的事。

参考链接:https://www.cnblogs.com/euphie/p/6376508.html

猜你喜欢

转载自www.cnblogs.com/bieff-66/p/10815895.html