免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yulihua49
打印 上一主题 下一主题

[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
11 [报告]
发表于 2015-10-13 14:52 |只看该作者
windoze 发表于 2015-10-13 14:32
如果用EPOLLET呢?

没试。太难出现了。我这样处理应该是行了。
今天又测了一天,没出现。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
12 [报告]
发表于 2015-10-13 15:29 |只看该作者
本帖最后由 happy_fish100 于 2015-10-13 15:32 编辑

我使用epoll多年,除了EINTR错误外,没有发现epoll_wait返回-1的情况啊!
感觉是LZ自己代码或者是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
13 [报告]
发表于 2015-10-14 11:25 |只看该作者
本帖最后由 yulihua49 于 2015-10-14 15:14 编辑
happy_fish100 发表于 2015-10-13 15:29
我使用epoll多年,除了EINTR错误外,没有发现epoll_wait返回-1的情况啊!
感觉是LZ自己代码或者是epoll用法 ...

呵呵,不是返回-1,是正常返回。
但是,一个events(task)分给了几个线程。

论坛徽章:
0
14 [报告]
发表于 2015-10-14 14:55 |只看该作者
yulihua49 发表于 2015-10-14 11:25
呵呵,不是返回-1,是正常返回。
但是,一个task分给了几个线程。


既然task分给了多个线程,你不加锁,理论上还是有问题

论坛徽章:
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
15 [报告]
发表于 2015-10-14 15:09 |只看该作者
本帖最后由 yulihua49 于 2015-10-14 15:16 编辑
db1984 发表于 2015-10-14 14:55
既然task分给了多个线程,你不加锁,理论上还是有问题

你们都理解错了,可能是我没说清楚。
task就是应用context,task=events.data.ptr。就是把一个event分给多个线程了。
把task分给了多个线程,这就是惊群!正常不应该出现的。
我是在线程里,得到task后,看看它如果已经在别的线程里了,就丢弃它。

帖子的那个代码改了,删除了无关语句,省的大家误解。

论坛徽章:
0
16 [报告]
发表于 2015-10-14 15:27 |只看该作者
yulihua49 发表于 2015-10-14 15:09
你们都理解错了,可能是我没说清楚。
task就是应用context,task=events.data.ptr。就是把一个event分给 ...


没错啊,说的就是那个if 和后面的赋值

论坛徽章:
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
17 [报告]
发表于 2015-10-14 15:35 |只看该作者
本帖最后由 yulihua49 于 2015-10-14 15:40 编辑
db1984 发表于 2015-10-14 15:27
没错啊,说的就是那个if 和后面的赋值

这不需要加锁。
因为epoll_wait是一个一个event放出来的,每个间隔3-7微秒,不会冲突的。
这才有了一个epoll队列只能15wqps左右的处理能力限制。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
18 [报告]
发表于 2015-10-15 10:12 |只看该作者
感觉还是epoll用法问题。一个连接,就应该只在一个线程中进行读写。
说得更明确一些,一个epoll描述,就应该专属一个线程,不应该跨线程执行epoll_wait操作。

论坛徽章:
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
19 [报告]
发表于 2015-10-15 12:53 |只看该作者
本帖最后由 yulihua49 于 2015-10-15 13:37 编辑
happy_fish100 发表于 2015-10-15 10:12
感觉还是epoll用法问题。一个连接,就应该只在一个线程中进行读写。
说得更明确一些,一个epoll描述,就应该专属一个线程,不应该跨线程执行epoll_wait操作 ...

嗯。这就是多队列的极端情况。
就是12楼说的:
http://bbs.chinaunix.net/thread-4067753-2-1.html
再看101楼
http://bbs.chinaunix.net/thread-4067753-11-1.html
173楼:
http://bbs.chinaunix.net/thread-4067753-18-1.html

我这个本身就是单队列多线程。改不了了。

论坛徽章:
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
20 [报告]
发表于 2015-10-19 00:40 |只看该作者
本帖最后由 wlmqgzm 于 2015-10-19 00:42 编辑

回复 17# yulihua49


    我的无锁ECHO服务器性能已经超过33万QPS了, 基于BOOST ASIO, 内部应该也是有队列的, 也有epoll,  IO_SERVICE 本身就是单队列多线程
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP