Nginx 系列學習之——多路IO複用

ps:最近在學習nginx,爲防止一些定義混淆或是遺忘,也是爲了方便未來應對相關業務場景時的翻閱,於是特地來csdn上記錄一些新學習到的知識技術,以便成長。文章內部或許會引用許多百度上的相關知識內容、博客或百科的文章片段,在下提前在這裏對大家說聲抱歉....

首先介紹下幾個定義

1、IO多路複用

     什麼是IO多路複用呢?我們先假設這樣一個場景,假設你現在有一個網站,某一天有一大羣人突然對你的網站感興趣,開始併發訪問你的網站,這個時候對於你網站的後臺而言,就會有大量請求。一個請求對於你的nginx而言就是一個socket流,所以多個socket流就會對應着多個IO流。那麼對於IO流請求操作系統內核有並行處理和串行處理的概念,串行處理的方式是一個個處理,前面的發生阻塞,就沒辦法完成後面的請求。這個時候我們必須考慮並行的方式完成整個IO流的請求來實現最大的併發和吞吐,這時候就是用到IO複用技術。IO複用就是讓一個Socket來作爲複用完成整個IO流的請求。

     上述過程看起來容易,但是在最早之前,衆多IO流是由一個線程來處理的。假設現在進來了一個請求,一個線程去處理了,這時候又來了一個,但是上一個請求還沒有處理完,得等到上一個請求處理完之後,才能繼續進行處理。同樣,假設還沒有io流過來,那麼線程便會處於等待的狀態。這便會導致阻塞。針對於這種情況,有兩種方式可以解決:

    (1)多線程方式

    (2)IO流複用

     但是呢,多線程/多進程方式,對於我們的操作系統而言,較爲耗費資源,所以IO多路複用纔是比較好的選擇。

2、非阻塞IO流模式

    什麼是非阻塞IO流模式呢,先簡單來段代碼

String[] strArray = new String[1000];
while(true){
    for(int i = 0; i<strArray.length; i++){
         if(strArray[i] == "123"){
            System.out.println("找到了");
        }
    }
}

 

2、epoll模型

       epoll是linux下的一個系統調用,用來監聽大量文件描述符並對其上的觸發事件進行處理。它是select/poll的增強版本,也是linux下多路複用io最常用的接口。要理解epoll是什麼,首先得清楚什麼是多路複用io。用戶進行io操作需要經過內核,而如果所請求的io目前不滿足條件(如需要從標準輸入讀取數據,而用戶還未輸入),這個時候內核就會讓應用程序陷入等待,即阻塞狀態。個人理解,io複用技術就是通過特定接口,將這種阻塞進行了轉移,轉嫁到了如select/poll/epoll之類多系統調用上,並且支持多個文件描述符多監測,即多路複用。這樣epoll便可以替應用程序同時監聽多個文件描述符,一旦有觸發發生,內核就會通知應用程序進行處理。

優勢一:解決select模型對於FD(文件句柄)的打開限制(select模型相對於上面的代碼而言就是相當於,另起了一個方法,用於獲取全部的String[] 中有值的部分組成一個數組,防止cpu空跑)

優勢二:執行效率提升(採用callBack回調機制)

ps:說到快,突然想起來,爲什麼nginx的併發處理能力強,正是因爲nginx使用了cpu的親和。啥是親和,自己去百度。nginx中工作進程利用親和性與服務器的cpu進行“綁定”,然後防止頻繁切換cpu造成的損耗。

3、nginx sendfile

百度了一波什麼是sendfile,感覺這位大佬的這篇博客寫的着實不錯,直接貼在這裏面了,方便以後查看

http://xiaorui.cc/2015/06/24/%E6%89%AF%E6%B7%A1nginx%E7%9A%84sendfile%E9%9B%B6%E6%8B%B7%E8%B4%9D%E7%9A%84%E6%A6%82%E5%BF%B5/

4、nginx 安裝目錄

(1)一些基本命令

rpm -ql xxx 使用yum的方式進行安裝,實質上就是安裝了一票子rpm包,運用這個命令,我們可以看到nginx的一些安裝路徑。

(2)安裝目錄詳解

/etc/logrotate.d/nginx 這是一個配置文件,主要是用於處理nginx服務所產生的日誌文件。輪轉logrotate所產生的日誌文件,進行日誌切割。

https://www.cnblogs.com/lovelinux199075/p/9038821.html

這位大佬這篇博客裏面寫的很詳細,mark一下

/etc/nginx 這個目錄下放着nginx的核心配置文件,其中

      /etc/nginx/conf 是主要啓動文件

      /etc/nginx/conf.d/default.conf 若是沒有變更的情況下便讀default.conf

/etc/nginx/fastcgi_params

/etc/nginx/scgi_params

/etc/nginx/uwsgi_params

這三個東西,是相關模塊配置需要用的一些基礎配置

/etc/nginx/mime.types 這個文件是配置文件格式的(文件擴展名),主要維護文件擴展名的對應關係

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章