IO多路復用是指內核一旦發(fā)現進程指定的一個或者多個IO條件準備讀取,它就通知該進程

通俗理解(摘自網上一大神)

這些名詞比較繞口,理解涵義就好。一個epoll場景:一個酒吧服務員(一個線程),前面趴了一群醉漢,突然一個吼一聲“倒酒”(事件),你小跑過去給他倒一杯,然后隨他去吧,突然又一個要倒酒,你又過去倒上,就這樣一個服務員服務好多人,有時沒人喝酒,服務員處于空閑狀態(tài),可以干點別的玩玩手機。至于epoll與select,poll的區(qū)別在于后兩者的場景中醉漢不說話,你要挨個問要不要酒,沒時間玩手機了。io多路復用大概就是指這幾個醉漢共用一個服務員。

三個函數

1、select

進程指定內核監(jiān)聽哪些文件描述符(最多監(jiān)聽1024個fd)的哪些事件,當沒有文件描述符事件發(fā)生時,進程被阻塞;當一個或者多個文件描述符事件發(fā)生時,進程被喚醒。

當我們調用select()時:

  1 上下文切換轉換為內核態(tài)

  2 將fd從用戶空間復制到內核空間

  3  內核遍歷所有fd,查看其對應事件是否發(fā)生

  4  如果沒發(fā)生,將進程阻塞,當設備驅動產生中斷或者timeout時間后,將進程喚醒,再次進行遍歷

  5 返回遍歷后的fd

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式