天天看點

網絡程式設計之epoll

網絡程式設計中異步IO主要有select和epoll兩種方式,彙總如下:

select與epoll比較

名稱 優點 缺點
select 跨平台,Windows和Linux都支援 可管理的socket數量較少,最大1024,且當socket數量較多時速度較慢
epoll 可管理的socket數量幾乎不受限制,不會随管理的socket數量增多而導緻處理速度慢 不是跨平台,隻能在Linux平台上使用

在使用epoll的時候主要使用到兩種事件EPOLLOUT和EPOLLIN,當發生EPOLLIN事件時表示有資料可以讀,我們可以調用recv函數讀資料,當發生EPOLLOUT事件時表示可以往socket中寫資料。

EPOLLIN有資料可讀時比較好了解,EPOLLOUT不太好了解,其實知道知道socket底層的工作機制就好了解了,我們調用recv或者是send函數時,其實核心是将資料拷貝在核心中的緩存中,recv與send的傳回值就是根據核心中的緩存大小來确定的,比如我們要發5M的資料出去,首先我們調用send函數,send函數會将要發送的資料放在緩存中,如果放的下就傳回成功,放不下就傳回失敗,5M的資料太大,我們肯定得調用多次send函數去發送,如果我們發出去的資料,對方沒有接收,那麼我們再次調用send函數時就會失敗,如果對方接收走了,那麼核心就會把緩存清空,這樣我們就又可以通過send發送資料了,是以如果發生EPOLLOUT事件說明我們又可以調用send函數了,核心中有緩存供我們發送資料了。

繼續閱讀