免费注册 查看新帖 |

Chinaunix

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

[其他] [基于Epoll内置Leader-Follower服务端实现, 已可达50万echo qps(全新支持Lua啦)] [复制链接]

论坛徽章:
0
131 [报告]
发表于 2013-02-22 11:23 |只看该作者
yulihua49 发表于 2013-02-22 10:22
10个连接,每个发10000包,最后有4、5个退不出来。丢事件了。

你弄的啥样?你不是一直坚持用select的吗 ...


4、5个退不出来,什么意思?

论坛徽章:
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
132 [报告]
发表于 2013-02-22 11:31 |只看该作者
本帖最后由 yulihua49 于 2013-02-22 11:33 编辑
iw1210 发表于 2013-02-22 11:23
4、5个退不出来,什么意思?

丢事件了,服务器不响应,有4、5个客户端死等。

论坛徽章:
0
133 [报告]
发表于 2013-02-22 11:39 |只看该作者
yulihua49 发表于 2013-02-22 11:31
丢事件了,服务器不响应,有4、5个客户端死等。

用队列了么?

论坛徽章:
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
134 [报告]
发表于 2013-02-22 11:46 |只看该作者
本帖最后由 yulihua49 于 2013-02-22 11:59 编辑
iw1210 发表于 2013-02-22 11:39
用队列了么?

用了,你看源码:
q_add().....
队列没问题。活都干完了,激活事件后select不响应了。
这是worker里激活select的代码。最后的几个线程,执行完fprintf后没消息了。
  1. int evt=conn->events;
  2.         conn->events=0;
  3.         pthread_mutex_lock(&beatLock);
  4.         FD_SET(sock,&rfds);
  5.         if (conn->woff > 0) FD_SET(sock,&wfds);
  6.         FD_SET(sock,&efds);
  7.         pthread_mutex_unlock(&beatLock);
  8. fprintf(stderr,"work %lu:sock=%d,events=%08X\n",pthread_self(),sock,evt);
  9.         if(!pthread_mutex_trylock(&beatLock)) {
  10.                 beatc='\n';
  11.                 write(beat[1],&beatc,1);
  12.                 pthread_mutex_unlock(&beatLock);
  13.         }
复制代码
这几个fd的最后遗言:
work 139915560453888:sock=9,events=00000001
work 139915508004608:sock=8,events=00000001
work 139915549964032:sock=10,events=00000001
work 139915570943744:sock=11,events=00000001
work 139915581433600:sock=12,events=00000001
work 139915539474176:sock=13,events=00000001
work 139915528984320:sock=14,events=00000001
就这几个事件丢了,相应的fd没有关闭。服务器没有死。
继续用telnet localhost 9876
还是可以正常工作的。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
135 [报告]
发表于 2013-02-22 11:58 |只看该作者
本帖最后由 starwing83 于 2013-02-22 11:59 编辑

回复 126# linux_c_py_php


    有没有示例代码?我来看看。

对了,如果你是coroutine,那么瓶颈再怎么说也应该在lua_resume上面吧 = =在lua_pcall上面是闹哪样= =

论坛徽章:
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
136 [报告]
发表于 2013-02-22 12:00 |只看该作者
本帖最后由 yulihua49 于 2013-02-22 12:07 编辑
starwing83 发表于 2013-02-22 11:58
回复 126# linux_c_py_php

13页129楼是调度器。


select.tar.gz (160.72 KB, 下载次数: 31)

客户端就用楼主给的那个。
里边的nohup.out就是最后执行结果。

编译后:
nohup ./server &
就可以了。
可以直接用telnet测试单连接。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
137 [报告]
发表于 2013-02-22 12:16 |只看该作者
回复 135# yulihua49


    我说的是蛇兄的Lua问题好么= =他调用xmove移动值不成功= =

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
138 [报告]
发表于 2013-02-22 12:17 |只看该作者
select是会有数量限制的,但是epoll没有。

select还会有那个fd-set的开销,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
139 [报告]
发表于 2013-02-22 12:21 |只看该作者
本帖最后由 yulihua49 于 2013-02-22 12:26 编辑
starwing83 发表于 2013-02-22 12:17
select是会有数量限制的,但是epoll没有。

select还会有那个fd-set的开销,epoll也不会存在开销问题。

现在那个先不管,能干活了再说。
有谁写过select的线程池吗?交流一下如何?

我也是抽风。有人说要用select,可移植。能力和效率先不管。
大家只说到select的能力和效率不行,我现在看不止如此,恐怕流程都走不下来。
文档说select用于同步IO。
现在拿他当异步IO,有点艰难。

论坛徽章:
0
140 [报告]
发表于 2013-02-22 12:43 |只看该作者
回复 133# yulihua49

看代码太累,你说说你的设计吧,每个线程的工作是什么?



   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP