网络编程之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函数了,内核中有缓存供我们发送数据了。

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