linux poll,epoll,select的区别

这篇具有很好参考价值的文章主要介绍了linux poll,epoll,select的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

epoll中红黑树的作用?

红黑树(rbtree)、以及epoll的实现原理_epoll 红黑树_For Nine的博客-CSDN博客

红黑树和epoll_wait的关系?

epoll_wait/就绪list和红黑树的关系 - 知乎

其他区别:

1. select 在linux内核中限制了能监听的数目上限。32位是1024,64位是2048

2. poll是将监听的对象改成了链表实现,因此没有数目上限

3. select和poll都需要每次从用户空间和内核空间之间进行数据的2次拷贝

select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此 Socket 标记为可读或可写, 接着再把整个文件描述符集合拷贝回用户态里,然后用户态还需要再通过遍历的方法找到可读或可写的 Socket,然后再对其处理。

所以,对于 select 这种方式,需要进行 2 次「遍历」文件描述符集合,一次是在内核态里,一个次是在用户态里 ,而且还会发生 2 次「拷贝」文件描述符集合,先从用户空间传入内核空间,由内核修改后,再传出到用户空间中。

select 使用固定长度的 BitsMap,表示文件描述符集合,而且所支持的文件描述符的个数是有限制的,在 Linux 系统中,由内核中的 FD_SETSIZE 限制, 默认最大值为 1024,只能监听 0~1023 的文件描述符。

poll 不再用 BitsMap 来存储所关注的文件描述符,取而代之用动态数组,以链表形式来组织,突破了 select 的文件描述符个数限制,当然还会受到系统文件描述符限制。

但是 poll 和 select 并没有太大的本质区别,都是使用「线性结构」存储进程关注的 Socket 集合,因此都需要遍历文件描述符集合来找到可读或可写的 Socket,时间复杂度为 O(n),而且也需要在用户态与内核态之间拷贝文件描述符集合,这种方式随着并发数上来,性能的损耗会呈指数级增长。

引用的文章:

9.2 I/O 多路复用:select/poll/epoll | 小林coding文章来源地址https://www.toymoban.com/news/detail-434917.html

到了这里,关于linux poll,epoll,select的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IO多路复用之select/poll/epoll

    掌握select编程模型,能够实现select版本的TCP服务器. 掌握poll编程模型,能够实现poll版本的TCP服务器. 掌握epoll的编程模型,能够实现epoll版本的TCP服务器. epoll的LT模式和ET模式. 理解select和epoll的优缺点对比. 提示:以下是本篇文章正文内容,下面案例可供参考 多路转接天然的是让我

    2023年04月09日
    浏览(61)
  • select,poll,epoll阻塞IO使用示例介绍

    epoll 打开设备文件或套接字,并确保设备或套接字处于可读或可写状态。 创建一个 epoll 实例,使用 epoll_create 函数创建一个 epoll 文件描述符。 将设备文件或套接字的文件描述符添加到 epoll 实例中,使用 epoll_ctl 函数将设备文件或套接字的文件描述符添加到 epoll 实例中,并设

    2024年02月12日
    浏览(30)
  • 多路转接方案:select poll epoll 介绍和对比

    内存和外设的交互叫做IO,网络IO就是将数据在内存和网卡间拷贝。 IO本质就是等待和拷贝,一般等待耗时往往远高于拷贝耗时。所以提高IO效率就是尽可能减少等待时间的比重。 IO模型 简单对比解释 阻塞IO 阻塞等待数据到来 非阻塞IO 轮询等待数据到来 信号驱动 信号递达时

    2024年02月08日
    浏览(38)
  • 网络编程详解(select poll epoll reactor)

    serverfd = socket( opt ):调用socket( )方法创建一个对应的serverfd bind( serverfd, address ):调用bind( )方法将fd和指定的地址( ip + port )进行绑定 listen( serverfd ):调用listen( )方法监听前面绑定时指定的地址 clientfd = accept( serverfd ):进入无限循环等待接受客户端连接请求 n = read( clientfd, buf

    2024年04月09日
    浏览(30)
  • Day 9. TCP并发模型、select、poll、epoll

    缺点: 1)创建线程会带来资源开销,能够实现 1)阻塞IO:没有数据到来时,可以让任务故挂起,节省CPU资源开销,提高系统效率 2)非阻塞IO:程序未接受到数据时程序一直执行,效率很低 3)异步IO:只能绑定一个文件描述符用来读取数据,但是效率很高 4)多路复用IO:

    2024年04月10日
    浏览(31)
  • 多路转接高性能IO服务器|select|poll|epoll|模型详细实现

    那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏 https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482 操作系统专栏 https://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482 手撕数据结构 https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014.3001.5482 去仓库获

    2024年02月15日
    浏览(50)
  • 【高并发网络通信架构】引入IO多路复用(select,poll,epoll)实现高并发tcp服务端

    目录 一,往期文章 二,基本概念 IO多路复用 select 模型 poll 模型 epoll 模型 select,poll,epoll 三者对比 三,函数清单 1.select 方法 2.fd_set 结构体 3.poll 方法 4.struct pollfd 结构体 5.epoll_create 方法 6.epoll_ctl 方法 7.epoll_wait 方法 8.struct epoll_event 结构体 四,代码实现 select 操作流程 s

    2024年02月12日
    浏览(46)
  • 【高并发网络通信架构】3.引入IO多路复用(select,poll,epoll)实现高并发tcp服务端

    目录 一,往期文章 二,基本概念 IO多路复用 select 模型 poll 模型 epoll 模型 select,poll,epoll 三者对比 三,函数清单 1.select 方法 2.fd_set 结构体 3.poll 方法 4.struct pollfd 结构体 5.epoll_create 方法 6.epoll_ctl 方法 7.epoll_wait 方法 8.struct epoll_event 结构体 四,代码实现 select 操作流程 s

    2024年02月14日
    浏览(32)
  • epoll与select区别

    首先select是posix支持的,而epoll是linux特定的系统调用,因此,epoll的 可移植性 就没有select好,但是考虑到epoll和select一般用作服务器的比较多,而服务器中大多又是linux,所以这个可移植性的影响应该不会很大。 其次,select可以监听的 文件描述符有限 ,最大值为1024,而epo

    2024年02月01日
    浏览(24)
  • 红黑树(RBTree)

    红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型用途是实现关联数组。它在1972年由鲁道夫·贝尔发明,被称为「对称二叉B树」,它现代的名字源于Leo J. Guibas和罗伯特·塞奇威克于1978年写的一篇论文。红黑树的结构复杂,但它的操作有着良好的

    2024年02月12日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包