MST

星途 面试题库

面试题:网络编程中UDP协议下IO多路复用技术的基本原理

请简述在UDP协议场景下,IO多路复用技术(如select、poll、epoll)是如何工作的,它们各自的特点和适用场景是什么?
42.9万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

UDP协议场景下IO多路复用技术工作原理

  1. select
    • 它通过设置一组文件描述符集合(读、写、异常),然后调用select函数。内核会遍历这些文件描述符集合,检查是否有就绪的文件描述符。
    • 在UDP场景下,当UDP套接字有数据到达时,该套接字的读描述符会被标记为就绪,select返回后,应用程序可以遍历集合,检查哪些描述符就绪,进而从就绪的UDP套接字读取数据。
  2. poll
    • select类似,也是通过传递一个文件描述符数组给内核。但poll使用的是链表结构来存储文件描述符及其相关事件,不像select使用固定大小的数组。
    • 在UDP场景中,同样当UDP套接字有数据到达,对应的描述符会被标记为就绪,应用程序通过遍历链表获取就绪描述符,进行数据读取。
  3. epoll
    • 有两种工作模式:LT(水平触发)和ET(边缘触发)。epoll通过epoll_create创建一个epoll实例,通过epoll_ctl添加、修改或删除要监控的文件描述符及其事件。
    • 在UDP场景下,当UDP套接字有数据到达,内核会将该事件通知给epoll实例,应用程序通过epoll_wait获取就绪事件。在LT模式下,只要数据未被读完,每次epoll_wait都会通知;在ET模式下,只有数据到达的边缘(新数据到来)才通知一次。

各自特点

  1. select
    • 优点:跨平台性好,几乎所有操作系统都支持。
    • 缺点
      • 文件描述符数量受限(通常1024),通过修改系统参数可调整但不灵活。
      • 采用轮询方式,随着文件描述符增多,性能线性下降。
      • 每次调用select都需要重新设置文件描述符集合,从用户态到内核态数据拷贝开销大。
  2. poll
    • 优点:文件描述符数量理论上无限制(仅受限于系统资源)。
    • 缺点
      • 同样采用轮询方式,随着文件描述符增多,性能下降明显。
      • 每次调用poll也需要传递整个文件描述符链表,用户态到内核态数据拷贝开销较大。
  3. epoll
    • 优点
      • 支持大量文件描述符(能轻松支持上万)。
      • 采用事件驱动,只有就绪的文件描述符才会被处理,性能高,适用于高并发场景。
      • 内核和用户空间共享存储,减少数据拷贝开销。
    • 缺点
      • 只在Linux系统上支持,跨平台性不如select
      • ET模式编程复杂,需要应用程序一次性处理完所有数据,否则可能丢失事件。

适用场景

  1. select:适用于小型应用程序,文件描述符数量较少且对性能要求不是特别高,需要跨平台兼容性的场景。
  2. poll:适用于中等规模应用,对文件描述符数量要求比select高一些,但对性能要求不是极端高的场景。
  3. epoll:适用于高并发、大量文件描述符的网络服务器应用,尤其是对性能有较高要求的场景,如Web服务器、游戏服务器等。