select,poll,epoll的探索
select
今天写的这三个主要是为了解决普通网络编程中一个连接创建一个线程处理的方式,这种方式不适合高并发的情况,select可以在单线程中处理多个请求
缺点:
1.参数较多,有五个参数,都需要单独进行管理
2.每次吧待检测io集合,复制进内核,影响性能
3.对io的数量有限制,最大1024
1 | // select |
poll
解决了select参数过多的问题,简化了函数参数,但因为底层仍是select,依然没有解决每次都要复制以及对io有数量限制的问题
1 | // int nready = poll(fds, maxfd+1, -1); |
epoll
相较于select和poll,epoll是事件驱动,支持两种触发方式,LT(水平触发),ET(边沿触发),epoll对与io只需要复制一次,不需要每次都进行复制,大大提高了性能
1 | int epfd = epoll_create(1);// 函数中的size是为了兼容旧的接口,大于一即可,内部已经不再使用传入的size,返回一个用于epoll的句柄 |
水平触发:读取多次,直到读不到数据
边沿触发:只读取一次,下次发送时,从原先数据位读取后一位开始读取数据
- 标题: select,poll,epoll的探索
- 作者: lkpalu
- 创建于 : 2024-12-06 16:02:14
- 更新于 : 2024-12-06 16:15:00
- 链接: https://redefine.ohevan.com/2024/12/06/select-poll-epoll的探索/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论