Nginx服務(wù)器的高性能原理IO復(fù)用介紹

這篇文章主要講解了“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è)計、正安網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、正安網(wǎng)絡(luò)營銷、正安企業(yè)策劃、正安品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供正安建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:bm7419.com

導(dǎo)入

Nginx的處理IO的方式是異步非阻塞。Nginx之所以高性能除了異步非阻塞之外,還有一個核心的原因:IO復(fù)用。

什么是IO復(fù)用?

從最簡單的例子說起,一個請求連接來了之后,一般情況下是怎么處理請求的呢? 如圖1所示

Nginx服務(wù)器的高性能原理IO復(fù)用介紹

瀏覽器的每次請求都會分配或者新啟一個進程與之對應(yīng),去處理請求。進程上下文之間的切換和新啟進程都會很浪費資源,怎么優(yōu)化呢?(舉手)把多進城變成多線程。  那么就有了如下圖2的優(yōu)化結(jié)果。

Nginx服務(wù)器的高性能原理IO復(fù)用介紹

這么做有啥不好呢?在思考一下,線程是進程調(diào)度的最小單位,一個進程有多個線程在同時處理請求,那么如果這個進程因為異常情況意外終止了,那么它所擁有的所有的線程都將全部終止運行,換句話說,服務(wù)掛了。哈哈,好刺激。

那么IO復(fù)用派上用場了~~前面我們提到了異步非阻塞,那么我們這樣來設(shè)計,我們設(shè)計一個進程池、事件響應(yīng)守護進程、請求服務(wù)進程。那么,我們的服務(wù)器的進程架構(gòu)如下圖所示:

Nginx服務(wù)器的高性能原理IO復(fù)用介紹

如上圖,我們將服務(wù)器分成了三個模塊:

  1. 進程池

  2. 事件響應(yīng)

  3. 事件注冊

當瀏覽器請求到達服務(wù)器之后,首先連接到(3)請求服務(wù)進程,并注冊一個事件,當請求發(fā)送數(shù)據(jù)的時候,這個時候會產(chǎn)生一個讀事件,這個時候會有(2)事件響應(yīng)進程會響應(yīng),將事件交給(1)進程池處理,同時再注冊一個寫事件。當進程池將請求處理完成之后,會響應(yīng)寫事件將處理的結(jié)果返回給瀏覽器。

那么IO復(fù)用所復(fù)用的是什么呢?

IO復(fù)用就是用一個進程來響應(yīng)真實的請求事件。本質(zhì)上復(fù)用的是進程。

Select與Epoll

當有讀寫事件發(fā)生了,事件守護進程響應(yīng)交給進程池處理,同時再注冊一個寫事件,但是進程池怎么知道是哪個socket有事件發(fā)生了呢?所以每次有事件發(fā)生的時候,事件響應(yīng)進程就會遍歷一下所有的socket連接句柄,判斷一下是否有事件發(fā)生,這種響應(yīng)事件的方式就被稱為Select模型。

怎么去優(yōu)化呢?如果每次有事件發(fā)生,如果能知道是確切的哪個socket連接的事件,效率就很高了,這樣方式就是Epoll模型。 舉個例子

  • 假如餐館有人要結(jié)賬,服務(wù)員就跟老板說一聲:“有人要結(jié)賬”,老板不知道是哪一桌要結(jié)賬,就需要挨個問一遍,這樣的方式就是select,時間復(fù)雜度O(n)。

  • 假如餐館有人要結(jié)賬,服務(wù)員就跟老板說一聲:“5號桌要結(jié)賬”,這樣的方式就是epoll,時間復(fù)雜度O(1)。

從大的方面了解一個高性能的服務(wù)器演化的過程,總結(jié)一下:池的概念會很大的提高性能,本次說到的是進程池,改成線程池(其實是多進程多線程模式)也是一樣。

感謝各位的閱讀,以上就是“Nginx服務(wù)器的高性能原理IO復(fù)用介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Nginx服務(wù)器的高性能原理IO復(fù)用介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

本文題目:Nginx服務(wù)器的高性能原理IO復(fù)用介紹
網(wǎng)站URL:http://bm7419.com/article28/pcdejp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、Google營銷型網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)面包屑導(dǎo)航、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)