經常使用的時間驅動模型(Windows和Linux都有)有三種:函數
一、select優化
- 對於讀(Read)事件、寫(Write)事件和異常(Exception)事件分別建立事件描述符集合,分別用來收集讀事件的描述符、寫事件的描述符和異常事件的描述符;
- 調用底層提供的select()函數,等待事件的發生;
- 輪詢全部事件描述符集合中的每個事件描述符,檢查是否有相應的事件發生,若是有就處理。
二、poll事件
該模型的實現方式與select相似,不一樣之處在於只建立一個事件描述符集合,在描述符對應的結構上分別設置讀事件、寫事件和異常事件,最後輪詢的時候,能夠同時檢查這三種事件是否發生。能夠說,poll是對select的優化實現。it
三、epollio
epoll與前兩種相比有不少不一樣。select
- 該模型是經過相關調用通知內核建立一個有N個描述符的事件列表;而後,給這些描述符列表設置所關注的事件,並把它添加到內核的事件列表中去;
- 完成設置以後,epoll就開始等待內核通知事件發生了。某一事件發生後,內核將發生事件的描述符列表上報給epoll。獲得事件列表的epoll就能夠開始事件處理了。