免费注册 查看新帖 |

Chinaunix

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

[C] 用select做服务器,8G内存做到30万~50万客户同时在线 [复制链接]

论坛徽章:
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
51 [报告]
发表于 2013-11-29 19:55 |只看该作者
本帖最后由 yulihua49 于 2013-11-29 20:06 编辑
iw1210 发表于 2013-11-28 16:05
进程调度的开销是比线程大,但这些都可忽略不计,更何况计算机运行速度发展如此迅速。扩展能力和灵活方便 ...

线程调度时间7微秒,意味着什么?,就是每秒14万的调度次数,所以单队列,每秒15-16Wqps(就算有时不到7微秒,有的机器主频比我略高)是极限了,与核数无关,只与主频有关。
近年来,cpu主频几乎不提高了,就是增加核。所以这个值就是系统瓶颈。
我的交易管理器,单队列,最高能力每秒65000,大家可能认为不高。
因为每个交易要两发两收,所以,一个TPS=2qps,就是13万qps。这说明什么?说明,交易转发器的其它工作都可以忽略不计,主要开销是在调度任务。
即使select,如果要支持多线程,它一次可以多个事件(epoll也行),就是7微秒内多个事件,但是如果把它们再通过一个队列分发给其它工作线程,还是躲不过这7微秒。
要么是通过多个队列分发。

当然,你那个方案没这个问题,那么多的进程,都是并行队列。

论坛徽章:
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
52 [报告]
发表于 2013-11-29 20:17 |只看该作者
本帖最后由 yulihua49 于 2013-11-29 20:28 编辑
iw1210 发表于 2013-11-28 15:58
数据库连接能力是数据库的事了,没必要关心,何况数据库链接开到10000都没事 ...

实测,在一定范围内,数据库引擎的处理能力,随着并行连接数的上升而上升,超过一定值,随着连接数(并行数)的上升,吞吐量会明显下降。
用OLAP系统测试的,连续密集的事务。OLTP反而好一些,因为它的数据库连接,不总是忙的。
引擎在无序的互斥竞争中,效力低下。这种情况,我们宁可保持适度的连接数,让过多的请求在外边排队。

我们调节连接池的连接数,使系统保持最高的处理能力,效果是显著的。
这样,当用户数膨胀时,响应时间永远是线性增长,而不会指数增长。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
53 [报告]
发表于 2013-11-30 22:19 |只看该作者
回复 34# iw1210


    再怎么说,大量的进程调度都比合适的少量进程更消耗CPU,而且select的fds在操作过程中的设置以及内核中的遍历是必不可少的,其消耗必然高于epoll,你的程序之所以没什么问题可能和你的网络通信量有关系,如果都是繁忙的连接又如何?如果连接的冷热不均又如何?真正经对比的得把问题给量化,最后说一句:跑着没问题是一回事,跑的很好是一回事儿,能很好的去跑又是另一回事儿了。

论坛徽章:
0
54 [报告]
发表于 2013-11-30 22:23 |只看该作者
本帖最后由 iw1210 于 2013-11-30 22:24 编辑
yulihua49 发表于 2013-11-29 20:17
实测,在一定范围内,数据库引擎的处理能力,随着并行连接数的上升而上升,超过一定值,随着连接数(并行 ...


不要把连接数和连接池搞混了。这是虚拟连接,不是物理连接。连接数和连接池是相辅的,连接池的物理连接数固定,虚拟连接数可以增加。所以不必顾虑连接数增加会导致数据库性能下降,数据库中提出连接池概念就是为解决连接数限制的问题。

论坛徽章:
0
55 [报告]
发表于 2013-11-30 22:47 |只看该作者
本帖最后由 iw1210 于 2013-11-30 22:53 编辑
myworkstation 发表于 2013-11-30 22:19
回复 34# iw1210
再怎么说,大量的进程调度都比合适的少量进程更消耗CPU,而且select的fds在操作过程中的设置以及内核中的遍历是必不可少的,其消耗必然高于epoll,...


大量进程调度会是不是影响性能的主要原因,需要实际考证。
小范围查找就解决了大范围盲目遍历的问题,比如只有一个连接,这个连接在当然只在一组内,遍历也就1000,而不是一万或几十万。再说了,其实程序中到处都是小范围查找东西,epoll当然也不例外。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
56 [报告]
发表于 2013-11-30 22:50 |只看该作者
回复 55# iw1210


    但实际上你所有的连接都是会遍历的啊。每个进程通到CPU时间片的时候都会进行这个处理吧。

论坛徽章:
0
57 [报告]
发表于 2013-11-30 22:56 |只看该作者
myworkstation 发表于 2013-11-30 22:50
回复 55# iw1210
但实际上你所有的连接都是会遍历的啊。每个进程通到CPU时间片的时候都会进行这个处理吧。

哪一组有fd触发时才遍历,没有当然就等待。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
58 [报告]
发表于 2013-11-30 22:58 |只看该作者
回复 57# iw1210


    这是哪儿的说法?有触发才遍历?select不遍历怎么知道触发?

论坛徽章:
0
59 [报告]
发表于 2013-11-30 23:01 |只看该作者
myworkstation 发表于 2013-11-30 22:58
回复 57# iw1210
这是哪儿的说法?有触发才遍历?select不遍历怎么知道触发?


select阻塞等待怎么说的来

论坛徽章:
0
60 [报告]
发表于 2013-11-30 23:12 |只看该作者
yulihua49 发表于 2013-11-29 19:55
线程调度时间7微秒,意味着什么?,就是每秒14万的调度次数,所以单队列,每秒15-16Wqps(就算有时不到7微 ...


很好,需要这样的数据加强说服力,这个方案的各方面数据如何?能都算出来么?帮忙算算吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP