首次用epoll遇到的一些问题

本文探讨了在文件传输中使用epoll遇到的问题,指出epoll更适合大量客户端小数据量的场景。总结了epoll的ET和LT模式,并强调了EPOLLONESHOT的使用技巧。同时,提出了sendfile函数在提高文件传输效率上的优势。

用epoll重写了一遍文件传输,写完后才明白epoll并不适用在这种文件传输类模型中,不过也收获了一些知识,总结一下,备忘


1.epoll这种IO复用,更适合大量客户端连接,但发送数据量不多的情况,比如web服务器,http服务器之类的,因为只有活跃的套接字数量多,这种交由系统去轮询的机制才会高效,否则只有数十个套接字甚至更低的情况,开多进程都能解决的问题,不断的轮询反而会使效率降低


2.epoll分为两种模式,ET模式(Edge Trigger),也称电平或水平模式,LT模式(Level Trigger),也称边沿或边缘模式。

LT模式

是标准模式,意味着每次epoll_wait()返回后,事件处理后,如果之后还有数据,会不断触发,也就是说,一个套接字上一次完整的数据,epoll_wait()可能会返回多次,直到没有数据为止。

ET模式

也称高效模式,有数据过来后,epoll_wait()会返回一次,一段时间内,该套接字就算有数据源源不断地过来,epoll_wait()也不会返回了。这里注意,是一段时间,不代表这个套接字上有数据就只触发一次。时间过长,还是会返回多次的。比如我写FTP用了epoll+多线程,但是每次套接字上有信息就开线程处理,同一时间内希望一个套接字只被一个线程持有,但是因为文件传输时间过长,就算使用ET模式,套接字还是会返回多次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值