最近看了一些nginx相關的文章,在此把自己對nginx的理解做個總結。 nginx是乙個支援高併發的web伺服器。高併發的原因重要的一點**於其非同步非阻塞的事件處理模式。
nginx是採用的是乙個master程序,多個worker程序的模型。
master程序的工作:
子程序的工作:
所有的worker程序都可以接受並處理新的請求,因為這個套接字是在master程序中開啟的,子程序自動的具備讀取這個套接字的能力。為了避免乙個新請求到來時,所有的worker程序都被驚醒,稱之為『驚群』。nginx採用了全域性共享鎖的方式,所有的程序中,要想監聽這個套接字,就需要先獲取到全域性共享鎖。只有獲得該鎖的程序,才可以監聽。從而保證每次都只有乙個程序,來accept新的請求。
nginx自己實現了乙個全域性共享鎖,實際是通過mmap建立了一塊兒共享記憶體。在程序獲取鎖之後,把這塊記憶體設定為自己的程序號。 這個鎖的爭奪,是通過原子操作來完成的。
epoll是linux中用來批量處理檔案描述符的系統核心功能,能夠實現高效得io多路復用。
epoll的操作主要通過3個函式來完成:
1、int epoll_create(). 用於建立乙個epoll物件。也是乙個檔案描述符. 所以在使用完之後,需要close。2、int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event). 其中epfd是被建立的epoll描述符。 op是具體的操作命令。 fd是只要把命令應用的物件。 event 指向epoll_event 結構的指標。
op具體的命令包括:
epoll_event結構:
struct epoll_event
其中epoll_data_t 結構如下:
typedef
union epoll_data //長度為8個位元組
epoll_data_t;
3、int epoll_wait(int epfd, struct epoll_event * events, int maxevents, inttimeout);
epfd就是要等待的epoll檔案描述符。 events 用於資料返回,發生事件的fd所對應的epoll_event。 maxevents 是最大檔案描述符數量。 timeout是超時時間,單位是ms數量。 0 表示立即返回。
返回值表示需要處理的事件數目。 0 表示函式呼叫超時。
最近學習總結
ubuntu安裝配置mysql sudo apt get install mysql server wget2 解壓縮 tar zxvf mysql connector python 2.1.1.tar.gz3 安裝 cd mysql connector python 2.1.1python set...
最近學習總結
1.雲牆刷流量 使用charles ip埠 擷取手機資料 設定手機 安裝charles證書 2.打ipa包 用itunes裝ipa包 3.定時命令 crontab 檔案中每個條目中各個域的意義和格式 第一列 分鐘 1 59 第二列 小時 1 23 0 表示子夜 第三列 日 1 31 第四列 月 1 ...
最近學習CAN總結
1,can一次可以傳送少於8個位元組,只是最多可以發8個。2,32位遮蔽位模式如何設定過濾器引數?在32位寬的模式下,can fxr1與can fxr2都用來儲存希望通過的canid,由於是32位寬的,因此既可以儲存標準can id,也可以儲存擴充套件can id。參考比如設定id的低5位必須與設定...