免费注册 查看新帖 |

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
11 [报告]
发表于 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
12 [报告]
发表于 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, 是吧.

论坛徽章:
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
13 [报告]
发表于 2013-02-16 18:20 |显示全部楼层
而且是根据你之前的一个帖子找到的, 这下牛逼了.

这尼玛内置LF, 直接无敌了... 我也不用动手了, 多线程+无脑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
14 [报告]
发表于 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
15 [报告]
发表于 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.

论坛徽章:
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
16 [报告]
发表于 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是一个设计理念, 有木有.

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

论坛徽章:
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
17 [报告]
发表于 2013-02-16 18:34 |显示全部楼层
windoze 发表于 2013-02-16 18:27
回复 27# linux_c_py_php

这是两码事。


我以为你说的是ET不需要ONESHOT也自动LF了呢, 理解错了.

还有个问题, epoll_wait自身LF了, 但我要accept与close连接, 我需要自己维护一个Connection数组来做记录, 这个数组的加锁访问(添加新连接, 或者我喜欢把注册的event记录在里面)是没法避免了吧, 这个对性能的损耗影响大吗?

论坛徽章:
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
18 [报告]
发表于 2013-02-16 18:38 |显示全部楼层
windoze 发表于 2013-02-16 18:32
回复 29# linux_c_py_php

如果你不希望同一个连接同时被多个thread处理,当然要加上ONESHOT。这样一旦某 ...


嗯, 多谢, 这些我可以理解的.

相当于 ONESHOT把epoll_wait和epoll_ctl(DEL)做了原子化,  这样对于应用程序来看基本上已经看不到LF的影子了, 都是epoll自己做的.


带出另外一个疑惑, 你们有没有试过这种情况下,        int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);的maxevents是指定为1还是根据情况设置, 因为我认为如果业务逻辑比较慢, 那么设置为1可以保证任务的散列可以均匀到N个线程, 免得一个业务处理慢让一堆event fd等着而让另外一些线程闲着,  但如果业务逻辑很快, 那么maxevents可以设置较大.

论坛徽章:
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
19 [报告]
发表于 2013-02-16 18:41 |显示全部楼层
windoze 发表于 2013-02-16 18:36
回复 32# linux_c_py_php

为什么要自己维护这个数组呢?epoll_data不是有地方让你放自己的数据么?


可以的, 如果是优雅退出想释放干净所有的资源, 或者如果我希望有时候可以遍历在线用户需求的话, 就不太方便了.

论坛徽章:
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
20 [报告]
发表于 2013-02-16 18:42 |显示全部楼层
yulihua49 发表于 2013-02-16 18:41
我指定为1。
否则又出现单线程分配。


非常和谐..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP