2011-06-10 47 views
7

我已經閱讀了一些網絡書籍,以瞭解epoll和select之間的區別,但他們只是稍微介紹了這些概念。如果你們能爲我提供細節上的關鍵差異,我將不勝感激。epoll VS select

在此先感謝

+0

http://stackoverflow.com/questions/2032598/caveats-of-select-poll-vs -epoll反應器 - 在加捻 – Young 2011-06-10 07:57:01

回答

14

select是做異步IO標準的UNIX工具。它的編程接口很古怪,它在大多數Unix中的實現最好是平庸的。它也限制了進程可以監視的描述符的最大數量,這在應用程序中是不方便的。關於效率,select的性能通常隨着描述符的數量而線性降低。

epoll在編程接口和效率方面比select大了許多改進,但是僅在從2.6版開始的Linux中提供。其他的Unix也有他們的專門調用。

1

select當調用select()時,始終向內核傳遞描述符。
但是epoll在調用epoll_ctl()時傳遞一次描述符,並通過調用epoll_wait()獲取事件。

並使用select循環0到max_descriptor來檢查事件。
但是,在使用epoll時,爲事件發生的描述符循環來檢查事件。

這些使性能有所不同。

select由於使用位數組而具有最大描述符數的限制。
但是epoll沒有限制,因爲它使用結構數組。

而且select存在於大多數的平臺(Windows,LINUX,UNIX,BSD)
epoll只存在於Linux操作系統。
當然,存在在其他平臺的epoll置換(IOCP在窗戶,kqueue的在bsd,等等。)