免费注册 查看新帖 |

Chinaunix

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

[其他] 【实测比较half-sync-half-async模式与leader-follower模式的性能与场景(直播)】 [复制链接]

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
21 [报告]
发表于 2013-02-16 18:15 |只看该作者
yulihua49 发表于 2013-02-16 18:01
在一个项目开始之前,确实有这个疑惑。
第一个版本就是一个线程监听,把事件分配给线程池。
发现瓶颈竟 ...


感觉理论没问题的依据是什么? 我感觉理论依据有问题, 解释不了的事情需要一个官方解释啊, 不能说压力测试没问题就没问题了, 如果你说epoll_wait会保证一个fd的事件一辈子就分配给一个已分配过的线程, 那我就直接信了.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
22 [报告]
发表于 2013-02-16 18:18 |只看该作者
找到了原因了:

       Since  even  with  edge-triggered  epoll, multiple events can be generated upon receipt of multiple chunks of data, the
       caller has the option to specify the EPOLLONESHOT flag, to tell epoll to disable the associated file  descriptor  after
       the receipt of an event with epoll_wait(2).  When the EPOLLONESHOT flag is specified, it is the caller’s responsibility
       to rearm the file descriptor using epoll_ctl(2) with EPOLL_CTL_MOD.

得给epoll上这个选项, 才能保证epoll_wait内置LF, 是吧.

论坛徽章:
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
23 [报告]
发表于 2013-02-16 18:19 |只看该作者
linux_c_py_php 发表于 2013-02-16 18:13
意思就是N个线程, 共享一个epoll实例, 然后都调用epoll_wait, 然后每个线程分到的event fd都不一样, 并 ...

我用的LT模式,据说不是效率最高的,但是可靠。+ONESHOT。
想试试ET,项目已投产,没机会了。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
24 [报告]
发表于 2013-02-16 18:20 |只看该作者
而且是根据你之前的一个帖子找到的, 这下牛逼了.

这尼玛内置LF, 直接无敌了... 我也不用动手了, 多线程+无脑epoll... 这岂不是无脑扩展服务承载能力吗, 牛逼了.

论坛徽章:
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
25 [报告]
发表于 2013-02-16 18:21 |只看该作者
回复 14# linux_c_py_php

多个thread同时对同一个epfd调用epoll_wait是完全正当的。

如果你用EPOLLET或者EPOLLONESHOT,epoll_wait就只通知某一个thread,不会产生惊群。
如果你用level trigger,那epoll_wait就会通知到所有的thread
如果在epoll_wait当中,另一个thread用epoll_ctl加入了已经有事件的fd,那epoll_wait就会立即通知到对应的thread
这本来就是epoll的基本用法,不用担心

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
26 [报告]
发表于 2013-02-16 18:21 |只看该作者
yulihua49 发表于 2013-02-16 18:19
我用的LT模式,据说不是效率最高的,但是可靠。+ONESHOT。
想试试ET,项目已投产,没机会了。


用ET会高效的, 一次event就把data读干净就OK了, 区别不大, 但据说减少了epoll_wait唤醒的次数.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
27 [报告]
发表于 2013-02-16 18:24 |只看该作者
windoze 发表于 2013-02-16 18:21
回复 14# linux_c_py_php

多个thread同时对同一个epfd调用epoll_wait是完全正当的。


ET应该也要+ONSHOT才行吧, 我看manpage里是这么说的:

       Since  even  with  edge-triggered  epoll, multiple events can be generated upon receipt of multiple chunks of data, the
       caller has the option to specify the EPOLLONESHOT flag, to tell epoll to disable the associated file  descriptor  after
       the receipt of an event with epoll_wait(2).  When the EPOLLONESHOT flag is specified, it is the caller’s responsibility
       to rearm the file descriptor using epoll_ctl(2) with EPOLL_CTL_MOD.

论坛徽章:
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
28 [报告]
发表于 2013-02-16 18:27 |只看该作者
回复 27# linux_c_py_php

这是两码事。

Edge Trigger针对的是一个IO事件,它保证对同一个事件只触发一次。
One Shot针对的是一个fd,它保证一个fd产生事件后,在重新enable之前,不会再产生任何事件

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
29 [报告]
发表于 2013-02-16 18:28 |只看该作者
linux_c_py_php 发表于 2013-02-16 18:24
ET应该也要+ONSHOT才行吧, 我看manpage里是这么说的:

       Since  even  with  edge-triggered  e ...


这个选项和libevent里~EV_PERSIST是一个设计理念, 有木有.

我感觉这个选项我同事都可能没人知道, 的确有点逆天.

论坛徽章:
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
30 [报告]
发表于 2013-02-16 18:31 |只看该作者
本帖最后由 yulihua49 于 2013-02-16 18:34 编辑
linux_c_py_php 发表于 2013-02-16 18:21
用ET会高效的, 一次event就把data读干净就OK了, 区别不大, 但据说减少了epoll_wait唤醒的次数.

可能是这样的。
我也想试试ET,那就有可能发生那个情况,可以每个event加个状态表明处理步骤。但是状态要想无缝,挺难的。
OO,楼上说没事,那就更好了。

一切基于试验,大家有机会试试吧,结果通报一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP