epoll和select的区别linux
时间: 2023-10-08 21:14:41 浏览: 57
回答: epoll和select是两种在Linux中用于I/O多路复用的机制。它们之间有几个区别。首先,epoll是Linux特定的系统调用,而select是POSIX支持的,因此epoll的可移植性没有select好。然而,考虑到epoll和select一般用于服务器,而服务器中大多数是Linux系统,所以这个可移植性的影响应该不会很大。\[1\]
其次,epoll在性能方面通常表现更好。这是因为epoll通过每次有就绪事件时将其插入到一个就绪队列中,使得epoll_wait的返回结果中只存储了已经就绪的事件,而select则返回了所有被监听的事件,事件是否就绪需要应用程序去检测。如果已被监听但未就绪的事件较多,对性能的影响就比较大。此外,每次调用select获得就绪事件时都要将需要监听的事件重复传递给操作系统内核,而epoll对监听文件描述符的处理则和获得就绪事件的调用分开,这样获得就绪事件的调用epoll_wait就不需要重新传递需要监听的事件列表,这也是性能更高的原因之一。另外,epoll的实现中使用了mmap调用使得内核空间和用户空间共享内存,从而避免了过多的内核和用户空间的切换引起的开销。\[2\]
此外,select可以监听的文件描述符数量有限,大约是1024,而epoll可以支持系统给整个进程的限制的最大文件描述符数量。这是可扩展性方面的区别。\[3\]
综上所述,epoll和select在可移植性、性能和可扩展性方面存在一些区别。选择使用哪种机制取决于具体的应用需求和目标平台。
#### 引用[.reference_title]
- *1* *2* [epoll 和 select 的区别](https://blog.csdn.net/u011907342/article/details/47979129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [epoll与select区别](https://blog.csdn.net/weixin_45045804/article/details/128351573)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]