网络编程-select,poll.epoll区别于联系

select,poll,epoll都是IO多路复用中的模型。再介绍他们特点时,先来看看多路复用的 模型。
网络编程-select,poll.epoll区别于联系_第1张图片
同其他IO的不同的是,IO多路复用一次可以等多个文件描述符。大大提高了等待数据准备好的时间的效率。为了完成等的效率,系统提供了三个系统调用:select,poll,epoll。
这里不再讲述三者具体实现,只总结三者的优缺点。

select的缺点

1.单个进程监控的文件描述符有限,通常为1024*8个文件描述符

当然可以改进,由于select采用轮询方式扫描文件描述符。文件描述符数量越多,性能越差。

2.内核/用户数据拷贝频繁,操作复杂。

select在调用之前,需要手动在应用程序里将要监控的文件描述符添加到fed_set集合中。然后加载到内核进行监控。用户为了检测时间是否发生,还需要在用户程序手动维护一个数组,存储监控文件描述符。当内核事件发生,在将fed_set集合中没有发生的文件描述符清空,然后拷贝到用户区,和数组中的文件描述符进行比对。再调用selecct也是如此。每次调用,都需要了来回拷贝。

3.轮回时间效率低

select返回的是整个数组的句柄。应用程序需要遍历整个数组才知道谁发生了变化。轮询代价大。

4、select是水平触发

应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作。那么之后select调用还是会将这些文件描述符返回,通知进程。

###poll特点

1.poll操作比select稍微简单点。select采用三个位图来表示fd_

你可能感兴趣的:(网络)