三种io函数的比较以及ET工作模式和LT工作模式的区别

io函数中ET和LT的区别:
    LT:描述符上有数据就绪,在提醒用户后,如果用户没有将该数据读完(处理完),在下一轮循环中io函数会继续提醒用户该描述符有数据就绪,直到用户将该描述符
上所有的数据读完。这样的特点让LT工作模式具有可靠但低效率的特点。
    ET:描述符上有数据就绪,在提醒用户后,如果用户没有处理完该描述符上的数据,在下一轮循环中io函数使不会再次提醒用户该描述符有数据就绪,除非该描述符上
有新的数据到达。这样的特点让ET工作模式具有高效率但不可靠的特点。
3中io函数的区别:
    1:向内核传递描述符   
        select/poll在每轮循环都要重新拷贝到内核空间
        epoll每个描述符只拷贝一次到内核空间
    2:内核实现
        select/poll是内核轮循检查每个描述符有没有事件发生,时间复杂度为O(n)
        epoll在描述符上设置回调函数,有数据就绪时调用回调函数添加到就绪队列中,时间复杂度为0(1)
    3:io函数返回后,检索就绪描述符
        select/poll要遍历所有的文件描述符找到就绪的文件描述符。时间复杂度为0(n)
        epoll会直接返回就绪的文件描述符,不需要遍历所有的描述符。时间复杂度为O(1)
    4:select/pll适合用于描述符数量较少的工程
        epoll适合用于描述符数量较多的工程
    5:select和poll没有本质的区别,只是select最大只能监视文件描述符的数量为1024,poll能够监视的文件描述符的数量相对较多

猜你喜欢

转载自blog.csdn.net/xing1584114471/article/details/83422147