select/poll/epoll的区别
1.select
文件描述符存储: 固定大小数组 轮询机制: 通过遍历所有注册文件描述符检查就绪状态,时间复杂度O(n) 描述符数量限制: 默认支持最多64或1024,拓展性差. 数据拷贝:每次调用都需要将描述符集合从用户态拷贝到内核态,描述符集合越大,性能越低. 触发模式: 只要描述符可读/可写,会持续通知应用程序. 支持平台: windows/类Unix 性能: 较低
2.poll
文件描述符存储: 动态数组 轮询机制: 通过遍历所有注册文件描述符检查就绪状态,时间复杂度O(n) 描述符数量限制: 不限制 数据拷贝:每次调用都需要将描述符数组从用户态拷贝到内核态,描述符数组越大,性能越低. 触发模式: 只要描述符可读/可写,会持续通知应用程序. 支持平台: Linux/类Unix 性能: 中
3.epoll
文件描述符存储: 共享内存(mmap)
轮询机制: 回调机制,时间复杂度O(1)
描述符数量限制: 不限制
数据拷贝: 采用共享内存,不需要拷贝
触发模式: 仅向应用程序通知就绪的文件描述符
支持平台: Linux专属
性能: 高
浙公网安备 33010602011771号