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,
    • 把數據從內核拷貝到用戶空間
相關文章
相關標籤/搜索