贵州十一选五前三直开奖号 | 財經 | 資源 | 理財 | 考研 | 職場 | 論文 | 資格 | 股票學院 |

股票學院: 股票入門 - 股票知識 - 股票術語 - 炒股技巧 - 選股技巧 - 跟莊技巧 - 炒股經驗 - 投資策略 - K線圖 - 均線 - 分時圖 - 成交量 - 波浪理論 - 基本面分析 - 心理分析 - 漲停研究 - 趨勢線 - 江恩理論 - MACD - KDJ - 技術指標 - 財經股票書籍在線閱讀 - 金融類書籍下載 - 銀行學院 - 保險學院 - 外匯學院 - 債券學院 - 股票學院 - 基金學院 - 港股學院 - 黃金學院

當前位置:贵州十一选五前三直开奖号 > 金融云 > 文章正文

贵州十一选五带连线的走势图:中間件--Web Server--Nginx

時間:2019-06-04 16:16:54來源:一只藍色猿作者:佚名

    贵州十一选五前三直开奖号 www.grzfr.com Ngnix一直以來都是I/O密集性服務的不二選擇,今天就把這兩天整理學習關于Ngnix的基本知識整理下,如果有錯誤,請大家指出,謝謝批評。

    Nginx 通過異步非阻塞的事件處理機制實現高并發。Apache 每個請求獨占一個線程,非常消耗系統資源。

    事件驅動適合于IO密集型服務(Nginx),多進程或線程適合于CPU密集型服務(Apache),所以Nginx適合做反向代理,而非web服務器使用。

    中間件--Web Server--Nginx

    基本的架構設計

    1、接口設計

    所有的??槎甲裱磐膎gx_module_t接口設計規范。

    2、Ngnix核心及其常用??檣杓乒叵?/strong>

    中間件--Web Server--Nginx

    總共有四個???。

    首先是配置???,配置??槭撬心?櫚幕?,他實現了最基本的配置項的解析功能。

    nginx定義了一種基礎類型的??椋漢誦哪??,??槔嘈褪荖GX_CORE_MODULE。定義核心??櫚哪康氖鞘溝梅悄?榛目蚣艽脛還刈⒂肴綰蔚饔?個核心???。

    事件???、HTTP???、mail??檎餿幟?櫚墓殘允牽菏導噬纖竊諍誦哪?櫓懈饔?個??樽魑約旱拇勻?,并在同類??櫓杏?個作為核心業務與管理功能的???。

    事件??槭荋TTP??楹蚼ail??櫚幕?。

    Nginx核心進程模型

    首先,正常執行中的nginx會有多個進程,最基本的有master process(監控進程,也叫做主進程)和woker process(工作進程),還可能有cache相關進程。

    1、master進程

    監控進程充當整個進程組與用戶的交互接口,同時對進程進行監護。它不需要處理網絡事件,不負責業務的執行,只會通過管理worker進程來實現重啟服務、平滑升級、更換日志文件、配置文件實時生效等功能。

    TIPS:master進程中for(::)無限循環內有一個關鍵的sigsuspend()函數調用,該函數調用是的master進程的大部分時間都處于掛起狀態,直到master進程收到信號為止。

    2、worker進程

    基本的網絡事件,是放在worker進程中來處理的,wenkor之間的進程是對等的,只可能在相同的wenkor中處理,一個wenkor進程不可能處理其他進程的請求。

    wenkor的個數,一般來說設置與cpu的個數相同,所以當我們提供8080端口的http請求服務時,一個請求過來,每個進程都有可能處理這個鏈接。因為更多的worker數,只會導致進程相互競爭cpu資源,從而帶來不必要的上下文切換

    3、處理過程

    master(master進程會先建立好需要listen的socket)——–fork生成子進程workers,繼承socket(此時workers子進程們都繼承了父進程master的所有屬性,當然也包括已經建立好的socket,當然不是同一個socket,只是每個進程的這個socket會監控在同一個ip地址與端口,這個在網絡協議里面是允許的)——當一個連接進入,產生驚群現象。

    驚群現象:一般來說,當一個連接進來后,所有在accept在這個socket上面的進程,都會收到通知,而只有一個進程可以accept這個連接,其它的則accept失敗。

    Nginx對驚群現象的處理:

    當一個worker進程在accept這個連接之后,就開始讀取請求,解析請求,處理請求,產生數據后,再返回給客戶端,最后才斷開連接,一個完整的請求。一個請求,完全由worker進程來處理,而且只在一個worker進程中處理。

    Nginx的事件處理機制:

    首先,對于一個web服務器來說,基本事務類型是:網絡事件、信號、定時器。

    1. Ngnix采用的是異步非阻塞的事件處理機制,由進程循環處理多個準備好的事件,從而實現高并發和輕量級。

    2. 采用信號事務機制通知worker進行工作

    詳解: 以epoll為例:當事件沒有準備好時,就放入epoll里面。如果有事件準備好了,那么就去處理;如果事件返回的是EAGAIN,那么繼續將其放入epoll里面。從而,只要有事件準備好了,我們就去處理她,只有當所有時間都沒有準備好時,才在epoll里面等著。這樣,我們就可以并發處理大量的并發了,當然,這里的并發請求,是指未處理完的請求,線程只有一個,所以同時能處理的請求當然只有一個了,只是在請求間進行不斷地切換而已,切換也是因為異步事件未準備好,而主動讓出的。

    這里的切換是沒有任何代價,你可以理解為循環處理多個準備好的事件

    題外問題

    Nginx與Apache對于高并發處理上的區別

    對于Apache,每個請求都會獨占一個工作線程,當并發數到達幾千時,就同時有幾千的線程在處理請求了。這對于操作系統來說,占用的內存非常大,線程的上下文切換帶來的cpu開銷也很大,性能就難以上去,同時這些開銷是完全沒有意義的。

    對于Nginx來講,一個進程只有一個主線程,通過異步非阻塞的事件處理機制,實現了循環處理多個準備好的事件,從而實現輕量級和高并發。

    Nginx比較Apache:事件驅動適合于IO密集型服務,多進程或線程適合于CPU密集型服務

    1. Nginx更主要是作為反向代理,而非Web服務器使用。其網絡模式是事件驅動(select、poll、epoll)。

    2. 事件驅動的本質還是IO事件,應用程序在多個IO句柄間快速切換,實現所謂的異步IO。

    3. 事件驅動服務器,最適合做的就是這種IO密集型工作,如反向代理,它在客戶端與WEB服務器之間起一個數據中轉作用,純粹是IO操作,自身并不涉及到復雜計算。

    4. 反向代理用事件驅動來做,顯然更好,一個工作進程就可以run了,沒有進程、線程管理的開銷,CPU、內存消耗都小。

    5. 當然,Nginx也可以是多進程 + 事件驅動的模式,幾個進程跑libevent,不需要Apache那樣動輒數百的進程數。

    6. Nginx處理靜態文件效果也很好,那是因為靜態文件本身也是磁盤IO操作,處理過程一樣。至于說多少萬的并發連接,這個毫無意義。我隨手寫個網絡程序都能處理幾萬7)的并發,但如果大部分客戶端阻塞在那里,就沒什么價值。

    再看看Apache或者Resin這類應用服務器,之所以稱他們為應用服務器,是因為他們真的要跑具體的業務應用,如科學計算、圖形圖像、數據庫讀寫等。它們很可能是CPU密集型的服務,事件驅動并不合適。

    1、例如一個計算耗時2秒,那么這2秒就是完全阻塞的,什么event都沒用。想想MySQL如果改成事件驅動會怎么樣,一個大型的join或sort就會阻塞住所有客戶端。

    相關閱讀

    焦點圖文

    關于我們 | 廣告服務 | 商務合作 | 網站地圖

    版權所有 Copyright(C)2018-2020 蘇州騏云躍網絡科技有限公司,未經授權禁止復制或建立鏡像,否則將依法追究法律責任!
    聲明:我們不做任何形式的代客理財及投資指導,凡是以天下金融網名義做股票推薦的行為均屬違法!
    廣告商的言論與行為均與天下金融網無關!股市有風險,投資需謹慎。
    蘇公網安備 32050502000166號
    蘇ICP備14018528號
    商務合作:贵州十一选五前三直开奖号

    天下金融網版權所有