免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
181 [报告]
发表于 2013-02-26 14:50 |只看该作者
本帖最后由 yulihua49 于 2013-02-26 15:01 编辑
iw1210 发表于 2013-02-25 17:33
你这个做的好了么,别忽悠我啊~
做好了发给我源代码学习下啊

select服务器移植到UNIX啦,在solaris服务器上测试:4核8超线程的服务器:
平均时间:       IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间:          lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:        eth0 161140.65 160855.88  12272.01  12252.89      0.00      0.00      0.00
平均时间:      virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:   virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
这次网络真是饱和啦!qps=16万,流量12.2M。

这个更有意义点,要的是可移植嘛。

100个连接的 nohup.out:

sched:8 Event's active!
sched:11 Event's active!
sched:3 Event's active!
sched:14 Event's active!
sched:6 Event's active!
sched:17 Event's active!
sched:9 Event's active!
sched:15 Event's active!
sched:12 Event's active!
sched:10 Event's active!
sched:10 Event's active!
sched:9 Event's active!
sched:10 Event's active!
sched:10 Event's active!
sched:9 Event's active!
sched:10 Event's active!
sched:10 Event's active!
sched:6 Event's active!
sched:12 Event's active!

UNIX更屌,select不支持非阻塞方式,fd必须在阻塞状态加入select,临使用前设定非阻塞,

select_solaris.tar.gz (1.02 MB, 下载次数: 74)

论坛徽章:
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
182 [报告]
发表于 2013-02-26 15:04 |只看该作者
本帖最后由 yulihua49 于 2013-02-26 15:20 编辑
yulihua49 发表于 2013-02-26 14:50
select服务器移植到UNIX啦,在solaris服务器上测试:4核8超线程的服务器:
平均时间:       IFACE   rxp ...

关于锁非常多的问题,这里是利用锁提高了select的效率。

select必须在调用时设置好fds。它进入后设置的任何状态都是无效的。因此每个线程归还fd后都要煽它一次。
那么许多线程就可能不断的煽它。造成低效。这时需要一个“聚束”的工作,大家设置好fds以后煽一次就行了。

见这一段代码:
  1.         pthread_mutex_lock(&beatLock);
  2.         FD_SET(sock,&rfds);
  3.         if (conn->woff > 0) FD_SET(sock,&wfds);
  4. //      FD_SET(sock,&efds);
  5.         pthread_mutex_unlock(&beatLock);
  6.         if(!pthread_mutex_trylock(&beatLock)) {
  7.                 beatc='\n';
  8.                 write(beat[1],&beatc,1);
  9.                 pthread_mutex_unlock(&beatLock);
  10.         }
复制代码
第6行,每个线程测试加锁,如果不能获取锁就拉倒。最后的线程获得了锁,煽了select。
这时一个无损聚束的动作,不需要聚束时间,哪怕只有一个线程也不会耽误。
效果嘛,你看看前边1000个连接的,每次都可以激活500-800个fds,虽然每次要遍历1024个fd,但是能够激活那么多fd,平均每个fd开销就不算大了,达到了接近epoll的水平。
前边100个连接的可以聚束到十几个。

论坛徽章:
0
183 [报告]
发表于 2013-02-26 15:06 |只看该作者
回复 181# yulihua49
你太牛X了,你的实验证明了我说的用select方案可行了啊~


   

论坛徽章:
0
184 [报告]
发表于 2013-02-26 15:08 |只看该作者
yulihua49 发表于 2013-02-26 15:04
关于锁非常多的问题,这里是利用锁提高了select的效率。

select必须在调用时设置好fds。它进入后设置的 ...

不就是用FD_SET设置描述符集合的么

论坛徽章:
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
185 [报告]
发表于 2013-02-26 15:22 |只看该作者
iw1210 发表于 2013-02-26 15:08
不就是用FD_SET设置描述符集合的么

其他线程的FD_SET无效,设完了必需打select一下,要他醒过来重新载入fds。

论坛徽章:
0
186 [报告]
发表于 2013-02-26 15:26 |只看该作者
yulihua49 发表于 2013-02-26 15:22
其他线程的FD_SET无效,设完了必需打select一下,要他醒过来重新载入fds。


什么意思?没明白~

论坛徽章:
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
187 [报告]
发表于 2013-02-26 15:32 |只看该作者
本帖最后由 yulihua49 于 2013-02-26 15:33 编辑
iw1210 发表于 2013-02-26 15:26
什么意思?没明白~

一个线程select,其他线程FD_SET是不起作用的。

论坛徽章:
0
188 [报告]
发表于 2013-02-26 15:38 |只看该作者
yulihua49 发表于 2013-02-26 15:32
一个线程select,其他线程FD_SET是不起作用的。


一个线程select就行了吧,有必要多线程select么?

论坛徽章:
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
189 [报告]
发表于 2013-02-26 15:46 |只看该作者
iw1210 发表于 2013-02-26 15:38
一个线程select就行了吧,有必要多线程select么?

其他线程干完活,怎么把fd归还到fdset里?

论坛徽章:
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
190 [报告]
发表于 2013-02-26 16:05 |只看该作者
为什么要打select一下, 我想是为了让select快速进入下一轮select吧, 否则FDSET的变化select没法及时获知.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP