免费注册 查看新帖 |

Chinaunix

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

[C] 各位做网络框架的注意啦,发现epoll有惊群! [复制链接]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-10 14:18 |只看该作者 |倒序浏览
本帖最后由 yulihua49 于 2015-10-14 15:13 编辑

发现epoll有惊群,即使使用了EPOLLONESHOT。
很偶然,今天又被扑捉到一次。程序新增的防惊群代码:

  1.             fds = epoll_wait(g_epoll_fd, &event, 1 , -1);
  2.             task = (TCB *)event.data.ptr;
  3.             if(task->events) {//在加入epoll前清0
  4.                 ShowLog(1,"%s:task->events=%08X,conflict!",__FUNCTION__,task->events);//发现惊群
  5.                 continue;//丢掉它
  6.             }
  7.             task->events=event.events;
复制代码

论坛徽章:
35
双子座
日期:2014-05-09 17:56:38程序设计版块每日发帖之星
日期:2015-08-30 06:20:00程序设计版块每日发帖之星
日期:2015-12-24 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-27 11:07:07程序设计版块每日发帖之星
日期:2016-01-12 06:20:0015-16赛季CBA联赛之北京
日期:2016-01-15 01:01:2115-16赛季CBA联赛之浙江
日期:2016-01-15 22:38:20程序设计版块每日发帖之星
日期:2016-01-18 06:20:00每日论坛发贴之星
日期:2016-01-18 06:20:0015-16赛季CBA联赛之北控
日期:2016-01-30 21:43:01程序设计版块每日发帖之星
日期:2016-02-08 06:20:0015-16赛季CBA联赛之山西
日期:2016-02-20 10:54:41
2 [报告]
发表于 2015-10-12 12:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
3 [报告]
发表于 2015-10-12 19:25 |只看该作者
ShowLog(1,"%s:epoll_wait err=%d,%s",__FUNCTION__,errno,strerror(errno));

完全可以简化,  warn_message_str(str_msg), 只需要一个参数 呵呵呵

#define warn_message_str(str_msg)      warning_message1((__FILE__),(__LINE__),(__FUNCTION__),(str_msg.c_str()))

void append_str_msg_error(std::string &str_msg, int int_errno)
{
  if( int_errno==0)   return;

  std::string str_error =  strerror( int_errno ) ;
  if( str_error.length()>0)  {
    str_msg += "error=";
    str_msg += str_error;
    str_msg += ", errno=";
    str_msg += std::to_string(int_errno);
    return;
    }
  str_msg += "errno=";
  str_msg += std::to_string(int_errno);
  return;
}

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
4 [报告]
发表于 2015-10-12 19:34 |只看该作者
本帖最后由 wlmqgzm 于 2015-10-12 19:48 编辑

不错,  这两天刚开始做一个网络程序,  还正在完善代码, 谢谢了

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2015-10-12 20:04 |只看该作者
本帖最后由 yulihua49 于 2015-10-12 20:09 编辑
wlmqgzm 发表于 2015-10-12 19:25
ShowLog(1,"%s:epoll_wait err=%d,%s",__FUNCTION__,errno,strerror(errno));

完全可以简化,  warn_mes ...

这个。。。。。。似乎与本主题无关。
今天测试了几个小时,没事了,再也没有捕捉到惊群。不过大家应该注意一下。
想测一下这样处理惊群行不行,可是它不出了。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
6 [报告]
发表于 2015-10-13 09:56 |只看该作者
yulihua49 发表于 2015-10-12 20:04
这个。。。。。。似乎与本主题无关。
今天测试了几个小时,没事了,再也没有捕捉到惊群。不过大家应该注 ...



是不是瞅一下内核代码去, 看看有没有触发惊群的分枝?

论坛徽章:
1
15-16赛季CBA联赛之同曦
日期:2016-04-23 22:00:26
7 [报告]
发表于 2015-10-13 13:02 |只看该作者
顶,老爷子就是厉害!

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
8 [报告]
发表于 2015-10-13 14:16 |只看该作者
回复 1# yulihua49


    余总..
你的sdbc qq群号是?
上次qq问题,批量退群了..再加下吧..

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
9 [报告]
发表于 2015-10-13 14:32 |只看该作者
如果用EPOLLET呢?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
10 [报告]
发表于 2015-10-13 14:50 |只看该作者
pandaiam 发表于 2015-10-13 14:16
回复 1# yulihua49
SDBC:100807652
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP