天天看點

Nginx源碼分析-Epoll子產品

Linux平台上,Nginx使用epoll完成事件驅動,實作高并發;本文将不對epoll本身進行介紹(網上一堆一堆的文章介紹epoll的原理及使用方法,甚至源碼分析等),僅看一下Nginx是如何使用epoll的。

Nginx在epoll子產品中定義了好幾個函數,這些函數基本都是作為回調注冊到事件抽象層的對應接口上,進而實作了事件驅動的具體化,我們看如下的一段代碼:

這段代碼就是epoll的相關函數注冊到事件抽象層,這裡所謂的事件抽象層在前面的博文中有提過,就是Nginx為了友善支援和開發具體的I/O模型,進而實作的一層抽象。代碼後面的注釋将功能說明得很詳細了,本文就隻重點關注ngx_epoll_init和ngx_epoll_process_events兩個函數,其他幾個函數就暫且忽略了。

ngx_epoll_init主要是完成epoll的相關初始化工作,代碼分析如下:

epoll初始化工作沒有想象中的複雜,和我們平時使用epoll都一樣,下面看ngx_epoll_process_events,這個函數主要用來完成事件的等待并處理。

本文将關注的兩個epoll函數也就這麼一點代碼了,但整個epoll還有添加事件和删除事件等的相關函數,代碼都很簡單,本文就不做具體的分析了。

繼續閱讀