IO多路復用是指內(nèi)核一旦發(fā)現(xiàn)進程指定的一個或者多個IO條件準備讀取,它就通知該進程
通俗理解(摘自網(wǎng)上一大神)
這些名詞比較繞口,理解涵義就好。一個epoll場景:一個酒吧服務員(一個線程),前面趴了一群醉漢,突然一個吼一聲“倒酒”(事件),你小跑過去給他倒一杯,然后隨他去吧,突然又一個要倒酒,你又過去倒上,就這樣一個服務員服務好多人,有時沒人喝酒,服務員處于空閑狀態(tài),可以干點別的玩玩手機。至于epoll與select,poll的區(qū)別在于后兩者的場景中醉漢不說話,你要挨個問要不要酒,沒時間玩手機了。io多路復用大概就是指這幾個醉漢共用一個服務員。
三個函數(shù)
1、select
進程指定內(nèi)核監(jiān)聽哪些文件描述符(最多監(jiān)聽1024個fd)的哪些事件,當沒有文件描述符事件發(fā)生時,進程被阻塞;當一個或者多個文件描述符事件發(fā)生時,進程被喚醒。
當我們調(diào)用select()時:
1 上下文切換轉(zhuǎn)換為內(nèi)核態(tài)
2 將fd從用戶空間復制到內(nèi)核空間
3 內(nèi)核遍歷所有fd,查看其對應事件是否發(fā)生
4 如果沒發(fā)生,將進程阻塞,當設備驅(qū)動產(chǎn)生中斷或者timeout時間后,將進程喚醒,再次進行遍歷
5 返回遍歷后的fd
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26