数字资产交易网站开发,寿光公司做网站,关镇铨装潢门店地址,网站后台更新了文章为何看不见目录 四种典型IO方式阻塞IO非阻塞IO信号驱动异步IO 多路转接IOselect模型接口 四种典型IO方式
IO#xff1a;输入输出–过程#xff1a;等待IO就绪#xff0c;进行数据拷贝 阻塞#xff1a;为了完成某功能#xff0c;发起一个调用#xff0c;若完成功能条件不具备#… 目录 四种典型IO方式阻塞IO非阻塞IO信号驱动异步IO 多路转接IOselect模型接口 四种典型IO方式
IO输入输出–过程等待IO就绪进行数据拷贝 阻塞为了完成某功能发起一个调用若完成功能条件不具备则一直等待 非阻塞发起一个调用若完成功能条件不具备则立即报错返回 阻塞与非阻塞通常用于描述某个接口发起调用后是否能够立即返回 同步一个功能完成后才能进行下一个若不能立即完成则一直等待 异步发起一个调用让别人完成具体功能不用等待功能完成后才能继续推进 同步与异步通常用于描述功能的完成流程。外部体现就是功能是否是自己完成的 异步阻塞与异步非阻塞 异步阻塞发起一个调用让系统完成任务进程一直等着系统完成任务。 异步非阻塞发起一个调用让系统完成任务进程继续做自己的事情 阻塞IO 阻塞IO发起IO调用若IO未就绪IO条件不具备则一直等待 优点流程最为简单 缺点效率较为低下 非阻塞IO 非阻塞发起IO调用若IO未就绪则立即报错返回 优点效率相较于阻塞有所提高 缺点需要循环进行操作不够实时 信号驱动 信号驱动自定义IO信号处理等待IO就绪收到信号打断当前操作进行IO 优点效率更高实时性更强 缺点操作流程更为复杂-需要定于信号处理 异步IO 异步IO自定义IO信号处理发起IO调用调用后立即返回让系统完成IO完成后通过信号通知进程。 优点对于资源利用率极高效率极高。 缺点流程最为复杂 多路转接IO IO多路转接IO多路复用 作用针对大量描述符进行IO就绪事件监控让进程仅仅针对已经就绪了IO事件的描述符进行IO操作避免了进程对未就绪的描述符进行操作所带来的性能损失或者阻塞。 实现select、poll、epoll IO就绪事件可读可写异常 select模型 select模型针对大量描述符进行IO就绪事件监控 操作流程 1.定义指定IO事件的描述符集合将需要监控指定时间的描述符添加到对应集合中 2.发起调用将需要监控的事件描述符集合拷贝到内核进行事件监控。若监控超时了都没有描述符就绪则返回若有描述符就绪了指定监控的事件则返回。在监控调用返回前都会将描述符集合中没有就绪事件的描述符移除。也就是说调用返回后集合中保留的只有就绪的描述符。 3.判断哪个描述符还在哪个集合中就知道哪个描述符就绪了什么事件进而进行对应IO操作。 接口
1.定义集合fd_set rfds, wfds, efds; 2.清空集合void FD_ZERO(fd_set *set); 3.将描述符添加到集合中void FD_SET(int fd, fd_set *set); 4.发起监控调用
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);nfds所有集合中最大的描述符的值1 readfds / writefds / exceptfds可读可写异常不监控置空 timeout监控超时等待时间 struct timeval{tv_usec, tv_sec} 一直等待则置NULL非阻塞则数据置0 返回值返回实际就绪的描述符个数出错返回-1超时返回0 5.调用返回后判断哪个描述符还在集合中确定哪个描述符就绪了什么事件
int FD_ISSET(int fd, fd_set *set);6.从指定集合中移除指定的描述符
void FD_CLR(int fd, fd_set *set);