1. 阻塞与非阻塞
#include <fcntl.h> //需要包含的头文件
int flag = fcntl(cfd, F_GETFL);
flag |= O_NONBLOCK;
fcntl(cfd, F_SETFL, flag);
2. 异步与同步
- 异步:应用程序在内核数据准备阶段与数据拷贝阶段都不需要等待,这部分任务内核完成后直接通知应用程序,其实这就是异步非阻塞IO(AIO:Asynchronous no-blocking IO)。
举个例子:你去面馆打包一份面,你和阿姨说了一声,等面好了,阿姨主动给你打电话通知你面已经到你家桌子上了。
- 同步:应用程序中的同步io函数read在数据拷贝阶段需要等待
同步阻塞(BIO:blocking IO):
例子:你去面馆打包一份面,你和阿姨说了一声,阿姨叫你在这等着看他做面(数据准备阶段),做完你拿着自己的碗去装面(数据拷贝阶段),装好了回家。
同步非阻塞(NIO:non-blocking IO):
例子:你去面馆打包一份面,你和阿姨说了一声,阿姨说面没好,你继续溜达,时不时回来看看面好了没,等到面好了,你拿着自己的碗去装面(数据拷贝阶段),装好了回家。
- 那么是否有异步阻塞io呢?答案是没有的,都已经是异步了,不需要应用程序管内核的数据准备和拷贝的事了,应用程序当然就没有阻塞这一说了!
水平有限,如有错误,大家多多指正!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)