Linux服務(wù)器網(wǎng)絡(luò)開發(fā)模型x_第1頁(yè)
Linux服務(wù)器網(wǎng)絡(luò)開發(fā)模型x_第2頁(yè)
Linux服務(wù)器網(wǎng)絡(luò)開發(fā)模型x_第3頁(yè)
Linux服務(wù)器網(wǎng)絡(luò)開發(fā)模型x_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、本文格式為Word版,下載可任意編輯 Linux服務(wù)器網(wǎng)絡(luò)開發(fā)模型x Linux 服務(wù)器網(wǎng)絡(luò)開發(fā)模型 為什么 Nginx 的性能要比 Apache 高得多? 這主要是由于 Nginx 使用了最新的 epoll(Linux 2.6 內(nèi)核)和 kqueue(FreeBSD)網(wǎng)絡(luò) I/O 模型,而 Apache 那么使用的是傳統(tǒng)的 select 模型。曾在一篇博客上看到有這么個(gè)實(shí)例: 假設(shè)你在大學(xué)中讀書,要等待一個(gè)摯友來(lái)訪,而這個(gè)摯友只知道你在 A 號(hào)樓,但是不知道你概括住在哪里,于是你們約好了在 A 號(hào)樓門口見面.假設(shè)你使用的阻塞 IO 模型來(lái)處理這個(gè)問題,那么你就只能一向守候在 A 號(hào)樓門口等待

2、摯友的到來(lái),在這段時(shí)間里你不能做別的事情,不難知道,這種方式的效率是低下的.現(xiàn)在時(shí)代變化了,開頭使用多路復(fù)用 IO 模型來(lái)處理這個(gè)問題.你報(bào)告你的摯友來(lái)了 A 號(hào)樓找樓管大媽,讓她報(bào)告你該怎么走.這里的樓管大媽扮演的就是多路復(fù)用 IO 的角色。 解釋 select 和 epoll 模型的工作方式: select 版大媽做的是如下的事情:譬如同學(xué)甲的摯友來(lái)了,select 版大媽對(duì)比笨,她帶著摯友挨個(gè)房間舉行查詢誰(shuí)是同學(xué)甲,你等的摯友來(lái)了。假設(shè)每到來(lái)一個(gè)摯友樓管大媽都要全樓的查詢同學(xué),那么處理的效率必然就低下了,過不久樓底就有不少的人了。 epoll 版大媽就對(duì)比先進(jìn)了,她記錄了同學(xué)甲的信息,譬

3、如說(shuō)他的房間號(hào),那么等同學(xué)甲的摯友到來(lái)時(shí),只需要報(bào)告該摯友同學(xué)甲在哪個(gè)房間即可,不用自己親自帶著人滿大樓的找人了。epoll 大媽可以不用吹灰之力就可以定位到同學(xué)甲。一看就很明白 epoll 和 select 模型的識(shí)別了吧。 在 Linux 內(nèi)核中,select 所用到的 FD_SET 是有限的,即內(nèi)核中有個(gè)參數(shù)_FD_SETSIZE 定義了每個(gè) FD_SET 的句柄個(gè)數(shù),在內(nèi)核源碼中 /usr/include/linux/posix_types.h 中 #undef _FD_SETSIZE #define _FD_SETSIZE 1024 假設(shè)想要同時(shí)檢測(cè) 1025 個(gè)句柄的可讀狀態(tài)或 可

4、寫狀態(tài) ,select 是不能實(shí)現(xiàn)的。在內(nèi)核中實(shí)現(xiàn) select 是使用輪詢方法,即每次檢測(cè)都會(huì)遍歷全體 FD_SET 中的句柄,鮮明,select 函數(shù)的執(zhí)行時(shí)間與 FD 檢測(cè)的句柄數(shù)越多就會(huì)越費(fèi)時(shí)。 epoll 是多路復(fù)用 是多路復(fù)用 IO(I/O Multiplexing) 中的一種方式,僅用于 linux2.6 以上內(nèi)核。而 epoll 模型它所支持的 FD 上限是最大可以開啟文件的數(shù)目,這個(gè)數(shù)字一般遠(yuǎn)大于 2048,舉個(gè)例子,在 1GB 內(nèi)存的機(jī)器上大約是 10 萬(wàn)左右,概括請(qǐng)查看:cat /proc/sys/fs/file-max ,這個(gè)數(shù)目和系統(tǒng)內(nèi)存關(guān)系很大。 傳統(tǒng)的 selec

5、t/poll 另一個(gè)致命弱點(diǎn)就是當(dāng)你擁有一個(gè)很大的 socket 集合,不過由于網(wǎng)絡(luò)延時(shí),任一時(shí)間只有片面的 socket 是活躍的,但是 select/poll 每次調(diào)用都會(huì)線性掃描全部的集合,導(dǎo)致效率呈現(xiàn)線性下降。但是 epoll 不存在這個(gè)問題,它只會(huì)對(duì)活躍的 socket 舉行操作這是由于在內(nèi)核實(shí)現(xiàn)中 epoll 是根據(jù)每個(gè) fd 上面的 callback 函數(shù)實(shí)現(xiàn)的。那么,只有活躍的 socket 才會(huì)主動(dòng)的去調(diào)用 callback 函數(shù),其他 idle 狀態(tài) socket 那么不會(huì),在這點(diǎn)上,epoll 實(shí)現(xiàn)了一個(gè)偽AIO,由于這時(shí)候推動(dòng)力在 os 內(nèi)核。在一些 benchmark

6、 中,假設(shè)全體的 socket根本上都是活躍的譬如一個(gè)高速 LAN 環(huán)境,epoll 并不比 select/poll 有什么效率,相反,假設(shè)過多使用 epoll_ctl,效率相比還有稍微的下降。但是一旦使用 idle connections 模擬 WAN 環(huán)境,epoll 的效率就遠(yuǎn)在 select/poll 之上了。 epoll 有兩種工作模式:Edge Triggered (ET)、 、Level Triggered (LT) LT(level triggered)是缺省的工作方式,并且同時(shí)支持 block 和 no-block socket.在這種做法中,內(nèi)核報(bào)告你一個(gè)文件描述符是否就緒了,然后可以對(duì)這個(gè)就緒的 fd舉行 IO 操作。假設(shè)你不作任何操作,內(nèi)核還是會(huì)持續(xù)通知你的,所以,這種模式編程出錯(cuò)誤可能性要小一點(diǎn)。傳統(tǒng)的 select/poll 都是這種模型的代表。 ET (edge-triggered)是高速工作方式,只支持 no-block socket。在這種模式下,當(dāng)描述符從未就緒變?yōu)榫途w時(shí),內(nèi)核通過 epoll 報(bào)告你。然后它會(huì)假設(shè)你知道文件描述符已經(jīng)就緒,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論