1. 程式人生 > >epoll相關資料整理

epoll相關資料整理

學習epoll有一段時間了,最近終於有一個伺服器採用了epoll模型,從中積累了一些epoll的資料.個人感覺目前可以找到的epoll相關的資料太少了,因為epoll僅被linux 2.6以上版本核心所支援,它的應用時間還比較短暫, 而一些講解網路程式設計的相關權威書籍(如已逝的stevens的UNP)都沒有講解這個不能跨unix平臺的專有技術,而epoll帶來的巨大效率提高又使得這項技術很有吸引力, 於是我決定將個人遇到的epoll相關問題整理一下, 隨著對epoll的理解深入, 這份資料將不斷的完善下去.

需要說明的是, 這份教材不適合網路程式設計的初學者, 這裡假設讀者具備一定的網路程式設計基礎, 使用過多路複用IO如select等.

1) 能不能給一個使用epoll相關API進行IO監控的示例?
在<<epoll學習筆記>>中有一個簡單的示例說明epoll相關API的使用, 但是這個示例是非常簡單的, 它僅僅關注於如何使用epoll相關函式上面, 如果要更好的使用epoll, 還需要自己動手以及閱讀資料.

2) epoll和select都屬於多路複用IO嗎?與阻塞IO相比多路複用IO有什麼優點?
在<<epoll為什麼這麼快>>, 重點是解釋epoll對比select在效率上提高的原因, 但是同時也解釋了多路複用IO的工作原理.

3) epoll的ET模式和LT模型有什麼區別?
<<
epll學習筆記
>>通過一個例項說明了兩者之間的差異, 但是我想, 如果結合著man文件(man epoll)來看效果會更好些.

4) 我的伺服器是採用多程序模型的, 我的父程序首先建立了epoll所使用的fd, 然後再建立子程序, 為什麼使用的時候沒過多久epoll_wait函式就一直返回0, 這樣IO事件就不會得到通知了?
太巧了, 筆者也遇到過類似的問題, 花了好幾天的時間進行除錯, 很幸運的是, 你不必像我這樣耗費時間在這個問題上面了, 因為在<<多程序伺服器中,epoll的建立應該在建立子程序之後>>中已經有了解答.

5)epoll的效率比起select來有很大的提高, 這裡面有什麼祕密嗎?
其實原理很簡單, 就是計算機世界中"空間換時間"思想的體現, 在<<
epoll為什麼這麼快
>>中有詳細的解釋.