這篇文章主要講解了“Nginx服務(wù)器的高性能原理IO復(fù)用介紹”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Nginx服務(wù)器的高性能原理IO復(fù)用介紹”吧!
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、正安網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、正安網(wǎng)絡(luò)營銷、正安企業(yè)策劃、正安品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供正安建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:aaarwkj.com
導(dǎo)入
Nginx的處理IO的方式是異步非阻塞。Nginx之所以高性能除了異步非阻塞之外,還有一個(gè)核心的原因:IO復(fù)用。
什么是IO復(fù)用?
從最簡單的例子說起,一個(gè)請求連接來了之后,一般情況下是怎么處理請求的呢? 如圖1所示
瀏覽器的每次請求都會分配或者新啟一個(gè)進(jìn)程與之對應(yīng),去處理請求。進(jìn)程上下文之間的切換和新啟進(jìn)程都會很浪費(fèi)資源,怎么優(yōu)化呢?(舉手)把多進(jìn)城變成多線程。 那么就有了如下圖2的優(yōu)化結(jié)果。
這么做有啥不好呢?在思考一下,線程是進(jìn)程調(diào)度的最小單位,一個(gè)進(jìn)程有多個(gè)線程在同時(shí)處理請求,那么如果這個(gè)進(jìn)程因?yàn)楫惓G闆r意外終止了,那么它所擁有的所有的線程都將全部終止運(yùn)行,換句話說,服務(wù)掛了。哈哈,好刺激。
那么IO復(fù)用派上用場了~~前面我們提到了異步非阻塞,那么我們這樣來設(shè)計(jì),我們設(shè)計(jì)一個(gè)進(jìn)程池、事件響應(yīng)守護(hù)進(jìn)程、請求服務(wù)進(jìn)程。那么,我們的服務(wù)器的進(jìn)程架構(gòu)如下圖所示:
如上圖,我們將服務(wù)器分成了三個(gè)模塊:
進(jìn)程池
事件響應(yīng)
事件注冊
當(dāng)瀏覽器請求到達(dá)服務(wù)器之后,首先連接到(3)請求服務(wù)進(jìn)程,并注冊一個(gè)事件,當(dāng)請求發(fā)送數(shù)據(jù)的時(shí)候,這個(gè)時(shí)候會產(chǎn)生一個(gè)讀事件,這個(gè)時(shí)候會有(2)事件響應(yīng)進(jìn)程會響應(yīng),將事件交給(1)進(jìn)程池處理,同時(shí)再注冊一個(gè)寫事件。當(dāng)進(jìn)程池將請求處理完成之后,會響應(yīng)寫事件將處理的結(jié)果返回給瀏覽器。
那么IO復(fù)用所復(fù)用的是什么呢?
IO復(fù)用就是用一個(gè)進(jìn)程來響應(yīng)真實(shí)的請求事件。本質(zhì)上復(fù)用的是進(jìn)程。
Select與Epoll
當(dāng)有讀寫事件發(fā)生了,事件守護(hù)進(jìn)程響應(yīng)交給進(jìn)程池處理,同時(shí)再注冊一個(gè)寫事件,但是進(jìn)程池怎么知道是哪個(gè)socket有事件發(fā)生了呢?所以每次有事件發(fā)生的時(shí)候,事件響應(yīng)進(jìn)程就會遍歷一下所有的socket連接句柄,判斷一下是否有事件發(fā)生,這種響應(yīng)事件的方式就被稱為Select模型。
怎么去優(yōu)化呢?如果每次有事件發(fā)生,如果能知道是確切的哪個(gè)socket連接的事件,效率就很高了,這樣方式就是Epoll模型。 舉個(gè)例子
假如餐館有人要結(jié)賬,服務(wù)員就跟老板說一聲:“有人要結(jié)賬”,老板不知道是哪一桌要結(jié)賬,就需要挨個(gè)問一遍,這樣的方式就是select,時(shí)間復(fù)雜度O(n)。
假如餐館有人要結(jié)賬,服務(wù)員就跟老板說一聲:“5號桌要結(jié)賬”,這樣的方式就是epoll,時(shí)間復(fù)雜度O(1)。
從大的方面了解一個(gè)高性能的服務(wù)器演化的過程,總結(jié)一下:池的概念會很大的提高性能,本次說到的是進(jìn)程池,改成線程池(其實(shí)是多進(jìn)程多線程模式)也是一樣。
感謝各位的閱讀,以上就是“Nginx服務(wù)器的高性能原理IO復(fù)用介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Nginx服務(wù)器的高性能原理IO復(fù)用介紹這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
本文題目:Nginx服務(wù)器的高性能原理IO復(fù)用介紹
網(wǎng)站URL:http://aaarwkj.com/article28/pcdejp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、Google、營銷型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)