91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么淺析Linux服務器網絡開發模型

發布時間:2021-12-18 18:31:08 來源:億速云 閱讀:105 作者:柒染 欄目:服務器

這篇文章將為大家詳細講解有關怎么淺析Linux服務器網絡開發模型,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

為什么Nginx的性能要比Apache高得多?

這主要是因為Nginx使用了最好的epoll(Linux 2.6內核)和kqueue(FreeBSD)網絡I/O模型,而Apache則使用的是傳統的select模型。

解釋select和epoll模型的工作方式:

select版大媽做的是如下的事情:比如同學甲的朋友來了,select版大媽比較笨,她帶著朋友挨個房間進行查詢誰是同學甲,你等的朋友來了。如果每到來一個朋友樓管大媽都要全樓的查詢同學,那么處理的效率必然就低下了,過不久樓底就有不少的人了。

epoll版大媽就比較先進了,她記下了同學甲的信息,比如說他的房間號,那么等同學甲的朋友到來時,只需要告訴該朋友同學甲在哪個房間即可,不用自己親自帶著人滿大樓的找人了。epoll大媽可以不用吹灰之力就可以定位到同學甲。一看就很明白 epoll和select 模型的區別了吧。

在Linux內核中,select所用到的FD_SET是有限的,即內核中有個參數__FD_SETSIZE定義了每個FD_SET的句柄個數,在內核源碼中 /usr/include/linux/posix_types.h 中

#undef __FD_SETSIZE#define __FD_SETSIZE 1024

如果想要同時檢測1025個句柄的可讀狀態或 可寫狀態 ,select是不能實現的。在內核中實現select是使用輪詢方法,即每次檢測都會遍歷所有FD_SET中的句柄,顯然,select函數的執行時間與 FD檢測的句柄數越多就會越費時。

epoll是多路復用IO(I/O Multiplexing) 中的一種方式,僅用于linux2.6以上內核。而epoll模型它所支持的FD上限是***可以打開文件的數目,這個數字一般遠大于2048,舉個例子,在1GB內存的機器上大約是10萬左右,具體請查看:cat /proc/sys/fs/file-max ,這個數目和系統內存關系很大。

傳統的select/poll另一個致命弱點就是當你擁有一個很大的socket集合,不過由于網絡延時,任一時間只有部分的socket是"活躍"的,但是select/poll每次調用都會線性掃描全部的集合,導致效率呈現線性下降。但是epoll不存在這個問題,它只會對"活躍"的socket進行操作---這是因為在內核實現中epoll是根據每個fd上面的callback函數實現的。那么,只有"活躍"的socket才會主動的去調用 callback函數,其他idle狀態socket則不會,在這點上,epoll實現了一個"偽"AIO,因為這時候推動力在os內核。在一些 benchmark中,如果所有的socket基本上都是活躍的---比如一個高速LAN環境,epoll并不比select/poll有什么效率,相反,如果過多使用epoll_ctl,效率相比還有稍微的下降。但是一旦使用idle connections模擬WAN環境,epoll的效率就遠在select/poll之上了。

epoll有兩種工作模式:Edge Triggered (ET)、Level Triggered (LT)

LT(level triggered)是缺省的工作方式,并且同時支持block和no-block socket.在這種做法中,內核告訴你一個文件描述符是否就緒了,然后可以對這個就緒的fd進行IO操作。如果你不作任何操作,內核還是會繼續通知你的,所以,這種模式編程出錯誤可能性要小一點。傳統的select/poll都是這種模型的代表。

ET (edge-triggered)是高速工作方式,只支持no-block socket。在這種模式下,當描述符從未就緒變為就緒時,內核通過epoll告訴你。然后它會假設你知道文件描述符已經就緒,并且不會再為那個文件描述符發送更多的就緒通知,直到你做了某些操作導致那個文件描述符不再為就緒狀態了(比如,你在發送,接收或者接收請求,或者發送接收的數據少于一定量時導致了一個EWOULDBLOCK 錯誤)。

關于怎么淺析Linux服務器網絡開發模型就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

班戈县| 门头沟区| 依安县| 佛坪县| 牙克石市| 莫力| 建始县| 山西省| 高唐县| 桃源县| 彭阳县| 获嘉县| 静宁县| 广东省| 深水埗区| 京山县| 安泽县| 阳信县| 瑞丽市| 天津市| 沙河市| 沁阳市| 巴塘县| 屏东县| 平武县| 扬中市| 资溪县| 长春市| 昌江| 荃湾区| 自贡市| 皋兰县| 塔城市| 乐山市| 临沂市| 鄂托克前旗| 福泉市| 嵊州市| 金昌市| 潜江市| 甘洛县|