select/poll/epoll的区别

1.select

文件描述符存储: 固定大小数组
轮询机制: 通过遍历所有注册文件描述符检查就绪状态,时间复杂度O(n)
描述符数量限制: 默认支持最多64或1024,拓展性差.
数据拷贝:每次调用都需要将描述符集合从用户态拷贝到内核态,描述符集合越大,性能越低.
触发模式: 只要描述符可读/可写,会持续通知应用程序.
支持平台: windows/类Unix
性能: 较低

2.poll

文件描述符存储: 动态数组
轮询机制: 通过遍历所有注册文件描述符检查就绪状态,时间复杂度O(n)
描述符数量限制: 不限制
数据拷贝:每次调用都需要将描述符数组从用户态拷贝到内核态,描述符数组越大,性能越低.
触发模式: 只要描述符可读/可写,会持续通知应用程序.
支持平台: Linux/类Unix
性能: 中

3.epoll

文件描述符存储: 共享内存(mmap)
轮询机制: 回调机制,时间复杂度O(1)
描述符数量限制: 不限制
数据拷贝: 采用共享内存,不需要拷贝
触发模式: 仅向应用程序通知就绪的文件描述符
支持平台: Linux专属
性能: 高

 

posted @ 2025-07-21 16:36  CJTARRR  阅读(12)  评论(0)    收藏  举报