poll() 和 select() 的区别
虽然 poll() 和select() 完成相同的工作,但 poll() 调用在很多方面仍然优于 select() 调用:
- poll() 不需要用户计算最大文件描述符值加 1 作为参数传递给它。
- poll() 对于值最大的文件描述符,效率最高。试想一下,要通过 select() 监视一个值为900的文件描述符,内核需要检查每个集合中的每个位,一直检查900个位。
- select() 的文件描述符集合是静态的,需要对大小设置进行权衡:如果值很小,会限制 select() 可监视的最大文件描述符值;如果值很大,效率会很低。当值很大时,大的位掩码操作效率不高,尤其是当无法确定集合是否稀疏集合。对于 poll(),可以准备创建大小合适的数组。如果只需要监视一项,则仅传递一个结构体。