網絡編程之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函數了,內核中有緩存供我們發送數據了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章