免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9443 | 回复: 8
打印 上一主题 下一主题

[C] EPOLLIN和EPOLLOUT同时使用的问题 [复制链接]

larkinboy 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-07 14:02 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2010-10-07 16:28 |只看该作者
http://bbs.chinaunix.net/thread-1795307-1-1.html    我写了一个服务模型 里面主体已经实现了 对于你说的EPOLLIN和EPOLLOUT同时使用 需要有一个socket结构体
包含recvbuff,sendbuff,recvsize,sendsize,连接时间等  收到epollin后放入 处理队列里做消息处理  同时将要返回的消息写入 sendbuff 然后修改为epollout  同时放入发送队列里 下次收到epollout后会找到相应位置 取出发送消息发送。我那个模型例子不是这样实现的是同步接收发送。  你可以改改加个结构体超时机制
larkinboy 该用户已被删除
3 [报告]
发表于 2010-10-07 17:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
larkinboy 该用户已被删除
4 [报告]
发表于 2010-10-07 17:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2010-10-07 21:04 |只看该作者
本帖最后由 wangyang917 于 2010-10-07 21:12 编辑

回复 3# larkinboy


    我epoll ET模式的也没做过,因为以前对select比较熟悉 所以更喜欢用LT 因为LT模式出错会比较少 会一直通知你事件发生更安全
   对于你说的client多次发送请求 如果是LT模式的话  我不知道你的server是长连接还是短连接   如果是短连接 当第一次请求改为epollout后 再有连接上来会有新fd连接上来 通过新fd再处理第二条请求。当然如果第一条处理的足够快可能第二条newfd还是第一条的fd  因为短连接关闭后再次accept出来的可能是原来fd也可能是newfd 这个要看你并发数量和一个线程逻辑处理速度   如果是长连接当第一条fd改为epollout后 再有数据发来还是会有新fd来处理。 因为只有第一条epollout发送后  会把fd重新ONESHOT 加入epoll队列监听这个fd是否有事件发生 这个时候才能再次接收新的消息上来。

   其实对于ET或者LT完全看工作和业务需要 反正我们用LT模式用的挺好 安全可靠  我们很多还在用select模型 也一样用的很好 流量也很大 只不过需要增加机器分担一下负载  简单可靠
larkinboy 该用户已被删除
6 [报告]
发表于 2010-10-07 22:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2010-10-07 23:11 |只看该作者
回复 6# larkinboy


    ET模式因为EPOLLIN和EPOLLOUT你要混用 长连接那么发送后肯定还要将EPOLLOUT改为EPOLLIN 让句柄再次监听  我例子里面的读写部分就是网上对于ET模式下的读写操作改写的。
  ET我个人觉得麻烦就在于对于数据处理 因为如果收发不全 下次就不再通知了  所以我个人还是觉得ET比较麻烦 个人喜好吧  
  另外LT耗费CPU得看你多大链接数和数据处理的复杂程度  如果你的业务一秒要处理1万个链接的话 CPU肯定要在50%以上  但我个人觉得你就一台机器做server 想必IM的用户量也不可能太多  反正我例子测试 一秒处理1666条的时候 我机器CPU也没耗费多少 关键还是看怎么用。
larkinboy 该用户已被删除
8 [报告]
发表于 2010-10-07 23:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2010-10-08 00:06 |只看该作者
回复 8# larkinboy

如果是LT模式下 如果EPOLLOUT发送后 要做一次ONESHOT 重新放入epoll队列进行监听 那么在没在做这一步之前 再有新链接到来 就会用新的fd来处理 老的fd因为还没有被ONESHOT所以这个fd是不会被监听到的 这就是为什么用LT模式应该要调用一次ONESHOT 我建议你还是用LT写一个 然后测试一下看看性能  用ET你要处理的东西可能会很多 到时候出了错 还得纠结是什么原因造成的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP