多路IO复用-----epoll和poll和select的区别
多路I/O复用:select、poll、epoll 的区别
基本概念
多路 I/O 复用是一种让单个进程能够同时监听多个文件描述符(如套接字)的 I/O 事件(如可读、可写、异常)的机制。在网络编程里,若要处理多个客户端的连接请求,传统方式是为每个连接创建一个线程或进程,然而这种方式会消耗大量系统资源。多路 I/O 复用技术可以让一个线程高效地处理多个连接,显著提升系统的并发处理能力。
三种机制的区别
特性 | select | poll | epoll |
---|---|---|---|
实现机制 | 轮询所有fd | 轮询所有fd | 回调通知机制 |
时间复杂度 | O(n) | O(n) | O(1) |
最大连接数 | 有限制(通常1024) | 无限制 | 无限制 |
fd拷贝 | 每次调用都需要从用户态拷贝到内核态 | 同select | 使用mmap减少拷贝 |
触发方式 | 水平触发 | 水平触发 | 支持水平触发和边缘触发 |
效率 | 连接数多时效率低 | 连接数多时效率低 | 连接数多时效率高 |
可扩展性 | 差 | 较差 | 好 |
epoll
、poll
和 select
均为用于实现 I/O 多路复用的机制,能让单个进程对多个文件描述符的 I/O 事件进行监控。以下是它们的区别:
1. 文件描述符数量限制
select
: