select,poll,epoll区别联系

selsect,poll,epoll区别联系

目录

一、区别

二、联系


    selectpoll 和 epoll 都是在 Linux 系统中用于实现 I/O 多路复用的机制,它们的主要目的是让程序能够同时监控多个文件描述符,以判断是否有事件发生,从而提高 I/O 操作的效率。

    一、区别

    • 事件通知机制
      • select:采用轮询的方式来检查文件描述符上的事件,当 select 函数返回后,需要遍历所有注册的文件描述符来判断哪些有事件发生,时间复杂度为 \(O(n)\),随着文件描述符数量的增加,效率会显著下降。
      • poll:与 select 类似,也是通过轮询的方式来检查事件,不过它的实现方式略有不同,poll 函数返回后,需要遍历整个文件描述符链表来确定发生事件的文件描述符,时间复杂度同样为 \(O(n)\)。
      • epoll:使用事件驱动的方式,当文件描述符上有事件发生时,内核会主动将该文件描述符添加到一个就绪队列中epoll_wait 函数返回时,只会返回就绪队列中的文件描述符,时间复杂度为 \(O(1)\),在处理大量文件描述符时,效率比 select 和 poll 高得多。

    select,poll内核实现:轮询方式 O(n)

    epol内核实现:注册回调函数O(1)

    • 内存拷贝方式
      • select:在每次调用 select 函数时,都需要将用户空间的文件描述符集合拷贝到内核空间,返回时再将结果从内核空间拷贝回用户空间,随着文件描述符数量的增加,内存拷贝的开销也会增大。
      • poll:与 select 类似,每次调用 poll 函数时,也需要在用户空间和内核空间之间拷贝文件描述符集合和相关信息。
      • epoll:在使用 epoll 时,首先通过 epoll_ctl 函数将文件描述符注册到内核中的 epoll 实例中,之后当有事件发生时,内核只需要将就绪的文件描述符信息拷贝到用户空间,相比 select 和 poll,减少了不必要的内存拷贝。

    二、联系

    • 功能相似:它们都是 I/O 多路复用技术的实现,都可以让一个进程同时监听多个文件描述符,以便在有事件发生时及时进行处理,从而提高程序的性能和响应能力。
    • 底层实现基础相同:它们都是基于操作系统的底层机制来实现的,都依赖于内核提供的功能来监听文件描述符的状态变化。
    • 应用场景相似:都适用于需要同时处理多个 I/O 事件的场景,如网络服务器、文件服务器等,在这些场景中,程序需要同时监听多个套接字或文件的读写事件,以便及时响应客户端的请求或处理文件的变化。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值