章節(jié)目錄
- I/O復(fù)用
- IO多路復(fù)用
- 多路復(fù)用-select、epoll
- select epoll 優(yōu)缺點(diǎn)總結(jié)
- linux 更改文件描述符大小的命令 - 面試會問
I/O復(fù)用
什么是I/O復(fù)用
I/O復(fù)用 解決的是并發(fā)性請求的問題鼓黔。
處理多個(gè)并發(fā)請求啡邑,要產(chǎn)生多個(gè)I/O流來進(jìn)行系統(tǒng)內(nèi)核數(shù)據(jù)的讀取辱志。
常用的兩種處理方式是串行撤防,前一個(gè)阻塞番枚,后面無法繼續(xù)進(jìn)行處理涌庭、并行處理請求-實(shí)現(xiàn)最大并發(fā)和吞吐审轮。
I/O復(fù)用定義為:一個(gè)socket作為復(fù)用來完成整個(gè)I/O流的請求鏈接建立肥哎,處理請求則采用多線程。
IO多路復(fù)用
普通版:
老師給一個(gè)班學(xué)生出題疾渣,并且老師不停挨個(gè)詢問學(xué)生有沒有做完試題篡诽,如果有
學(xué)生做完試題,則解答榴捡,這種方式采用的是串行的處理方式杈女。
強(qiáng)化版:
老師分身,創(chuàng)建多個(gè)線程老師,分別處理每個(gè)學(xué)生做完的試題达椰,這種方式采用的是多線程的處理方式翰蠢。但是資源分配上、上下文切換會出現(xiàn)額外資源消耗啰劲。
究極版:
真正的I/O多路復(fù)用
學(xué)生(網(wǎng)絡(luò)請求-請求數(shù)據(jù)分組到達(dá)梁沧,)主動上報(bào)自己做題的情況,復(fù)用的是老師處理學(xué)生做題情況的線程
什么是I/O多路復(fù)用
多個(gè)描述符的I/O操作都能在一個(gè)線程內(nèi)并發(fā)交替地順序完成蝇裤,這就叫I/O多路復(fù)
用廷支,這里的“復(fù)用”指的是復(fù)用同一個(gè)線程
多路復(fù)用-select、epoll
select
I/O多路復(fù)用采用的是select 模型猖辫,即系統(tǒng)發(fā)出select系統(tǒng)調(diào)用酥泞,等待內(nèi)核主動將可
用的文件描述符信息發(fā)送給應(yīng)用一端砚殿,fd未準(zhǔn)備好啃憎,應(yīng)用會block住socket請
求,當(dāng)fd就許后似炎,select 會遍歷維護(hù)的文件描述符發(fā)現(xiàn)可用的文件描述符辛萍。
epoll
每當(dāng)fd就緒,系統(tǒng)采用回調(diào)函數(shù)將fd放入就緒列表羡藐,效率非常高贩毕。
舉例:
告訴服務(wù)員,用餐結(jié)束仆嗦,服務(wù)員告知老板辉阶,說有幾桌要結(jié)賬,老板需要詢問
告訴服務(wù)員瘩扼,用餐結(jié)束谆甜,服務(wù)員告知老板,說哪號桌要結(jié)賬集绰,老板不需要詢問规辱。
select epoll 優(yōu)缺點(diǎn)總結(jié)
模型 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|
select | 1.采用線性遍歷的方式獲取可用的fd文件描述符 2.可維護(hù)文件描述符大小有限制為1024 |
|
epoll | 1.每當(dāng)fd就緒,系統(tǒng)采用回調(diào)函數(shù)將fd放入就緒列表栽燕,效率非常高罕袋。 2.最大連接數(shù)沒有限制 |
linux 更改文件描述符大小的命令 - 面試會問
當(dāng)前登陸態(tài)修改方式
ulimit -n [fd數(shù)量]
永久生效、開機(jī)啟動方式
1.vi /etc/security/limits.conf
2.- nofile 4096
3.重啟操作系統(tǒng)