一、概念:
? ? ? ? 使單線程或者單進程同時監測若干個文件描述符具有執行的能力;
二、作用:
? ? ? ? 類似于多進程和多線程
三、必要性:
? ? ? ? 多線程或者多進程對資源需求較高
四、IO模型:
? ? ? ? 1.阻塞io
? ? ? ? ? ? ? ? 不設置的話系統默認
? ? ? ? 2.非阻塞io
? ? ? ? ? ? ? ? 在阻塞io的基礎上調整為不在阻塞狀態
? ? ? ? ? ? ? ? 用到的函數接口:fcntl
? ? ? ? 3.信號驅動io
? ? ? ? 4.并行模型 進程 ,線程
? ? ? ? 5.io的多路復用
五、函數接口
? ? ? ? 1.select:完成指定描述符集合中有效描述符的動態監測
? ? ? ? ? ? ? ? 該函數具有阻塞功能
? ? ? ? 2.epoll:功能和select大致相同
? ? ? ??epoll 解決了select和poll的幾個性能上的缺陷:①不限制監聽的描述符個數(poll也是),只受進程打開描述符總數的限制;②監聽性能不隨著監聽描述 符數的增加而增加,是O(1)的,不再是輪詢描述符來探測事件,而是由描述符主動上報事件;③使用共享內存的方式,不在用戶和內核之間反復傳遞監聽的描述 符信息;④返回參數中就是觸發事件的列表,不用再遍歷輸入事件表查詢各個事件是否被觸發。
epoll顯著提高性能的前提是:監聽大量描述符,并且每次觸發事件的描述符文件非常少。
epoll的另外區別是:①epoll創建了描述符,記得close;②支持水平觸發和邊沿觸發。
?
? ? ? ??