select、poll、epoll之间的区别

http://www.javashuo.com/article/p-cntwfxgr-eb.htmlhtml

  • fd指文件描述符
  • select
    • 时间复杂度O(n)
    • 无差异轮询全部流,找出能读出数据,或者写入数据的流,对他们进行操做
  • poll
    • 时间复杂度O(n)
    • poll本质上和select没有区别,
    • 它将用户传入的数组拷贝到内核空间,
      • 而后查询每一个fd对应的设备状态, 
    • 可是它没有最大链接数的限制,缘由是它是基于链表来存储的.
  • epoll
    • 时间复杂度O(1)
    • 能够理解为event poll
    • epoll其实是事件驱动(每一个事件关联上fd)的,
      • 此时咱们对这些流的操做都是有意义的
  • 但select,poll,epoll本质上都是同步I/O,
    • 由于他们都须要在读写事件就绪后本身负责进行读写,
    • 也就是说这个读写过程是阻塞的
    • 而异步I/O则无需本身负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。  
  • AIO也是基于epoll,
    • 把数据从内核拷贝到用户空间
相关文章
相关标签/搜索