1. 程式人生 > >從linux原始碼看epoll

從linux原始碼看epoll

# 從linux原始碼看epoll ## 前言 在linux的高效能網路程式設計中,繞不開的就是epoll。和select、poll等系統呼叫相比,epoll在需要監視大量檔案描述符並且其中只有少數活躍的時候,表現出無可比擬的優勢。epoll能讓核心記住所關注的描述符,並在對應的描述符事件就緒的時候,在epoll的就緒連結串列中新增這些就緒元素,並喚醒對應的epoll等待程序。 本文就是筆者在探究epoll原始碼過程中,對kernel將就緒描述符新增到epoll並喚醒對應程序的一次原始碼分析(基於linux-2.6.32核心版本)。由於篇幅所限,筆者聚焦於tcp協議下socket可讀事件的原始碼分析。 ## 簡單的epoll例子 下面的例子,是從筆者本人用c語言寫的dbproxy中的一段程式碼。由於細節過多,所以做了一些刪減。 ``` int init_reactor(int listen_fd,int worker_count){ ...... // 建立多個epoll fd,以充分利用多核 f