Epoll模型的高性能服务器丢失数据问题解决


2019.3.3更新

经过测试,使用epoll的ET模式对比LT模式并没有太大的性能提升,但是LT模式的可靠性远远优于ET模式,如果使用ET模式需要增加大量代码以提升可靠性。所以在设计系统的时候应对两种模式加以权衡,需要极致性能则需要解决ET不够可靠的弊端,或者直接选用LT模式牺牲部分性能。


0. 问题起因

使用epoll模型后,虽然提高了服务器的并发性,但是在测试时发现一个很严重的问题,当服务器负载很高时,部分数据会丢弃掉,问题最严重的时候10万条测试数据可以达到百分之5的丢失概率,这对于服务器来说已经违背的初衷,虽然并发性能提高了,但是服务器的可靠性得不到保证。

1. 问题分析

通过Epoll部分的代码,查阅了Epoll的相关资料和特性,做出如下推测。
首先从Epoll的两种事件模型说起。
Edge Triggered(ET)
Level Triggered(LT)
当使用LT模式时,事件发生时内核会通知程序处理该事件(例如可读事件),如果用户没有做出响应,内核会继续通知。这样是造成了LT模式较慢的原因,但是LT模式可以减少编程时错误的可能性。
为了提高服务器的并发性,使用ET模式,当事件发生时内核同样会通知程序处理该事件,但此时内核默认你已经处理的该事件,不管你是不是真的处理了,都不会再通知你。
在此次高性能服务器设计中,三个线程分别执行读操作,测试客户端持续向服务器发送数据,维持服务器高负载。数据到来时内核可能通知程

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值