免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: iw1210

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

论坛徽章:
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
发表于 2013-11-30 23:18 |显示全部楼层
回复 59# iw1210


    这个你可以查手册了,或操作系统的文档,在接口api这个层次上文档虽然大多没有直接说明这个遍历行为,但其实上了BSD socket实现以来都是这么干的。

论坛徽章:
0
发表于 2013-11-30 23:25 |显示全部楼层
本帖最后由 iw1210 于 2013-12-01 11:19 编辑

回复 61# myworkstation
记得看过资料说一个bit位对应一个fd,是比特位触发判断,不是遍历。
想想也就知道了,在内核一定建立了一种映射关系,直接触发fd可读写事件,如果做成遍历,那也太...

论坛徽章:
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
发表于 2013-12-02 10:25 |显示全部楼层
iw1210 发表于 2013-11-30 22:23
不要把连接数和连接池搞混了。这是虚拟连接,不是物理连接。连接数和连接池是相辅的,连接池的物理连接 ...

你当然可以把数据库虚连接(什么是虚连接,是连接了不工作吗?)。
每个进程启动时连接数据库,还是有请求才连?
如果在密集工作,应该都是实连接了吧?
500个实连接,当数据库配的大一点,还可以。但是肯定不是性能最高的状态。

论坛徽章:
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
发表于 2013-12-02 10:37 |显示全部楼层
iw1210 发表于 2013-11-30 23:25
回复 61# myworkstation
记得看过资料说一个bit位对应一个fd,是比特位触发判断,不是遍历。
想想也就知 ...

参考一下:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1740209

论坛徽章:
0
发表于 2013-12-02 10:54 |显示全部楼层
yulihua49 发表于 2013-12-02 10:25
你当然可以把数据库虚连接(什么是虚连接,是连接了不工作吗?)。
每个进程启动时连接数据库,还是有请 ...

记得Oracle官方文档没有说过链接过多会导致性能下降,你看到过么?

论坛徽章:
0
发表于 2013-12-02 11:00 |显示全部楼层
本帖最后由 iw1210 于 2013-12-02 11:04 编辑
yulihua49 发表于 2013-12-02 10:37
参考一下:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1740209



2.2 select 模型

1. 最大并发数限制,因为一个进程所打开的 FD (文件描述符)是有限制的,由 FD_SETSIZE 设置,默认值是 1024/2048 ,因此 Select 模型的最大并发数就被相应限制了。自己改改这个 FD_SETSIZE ?想法虽好,可是先看看下面吧 …

2. 效率问题, select 每次调用都会线性扫描全部的 FD 集合,这样效率就会呈现线性下降,把 FD_SETSIZE 改大的后果就是,大家都慢慢来,什么?都超时了??!!

3. 内核 / 用户空间 内存拷贝问题,如何让内核把 FD 消息通知给用户空间呢?在这个问题上 select 采取了内存拷贝方法。

==============

用 FD_SETSIZE 的默认值 1024/2048 就好,无需增加。
“线性扫描全部的 FD 集合”是用户进程的工作,不是在内核。
“内核把 FD 消息通知给用户空间,select 采取了内存拷贝方法”,内存拷贝方法有何不妥么?在程序中内存拷贝到处存在,文章说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
发表于 2013-12-02 11:12 |显示全部楼层
本帖最后由 yulihua49 于 2013-12-02 11:23 编辑
iw1210 发表于 2013-12-02 10:54
记得Oracle官方文档没有说过链接过多会导致性能下降,你看到过么?

这无需说。大量链接塞死数据库的实例还少吗,12306最后不得不加入排队机制?
只是11G的连接池你可以研究一下,对你还是有用的。

无序竞争比有序排队肯定效率要低,轨道交通和公路交通的区别。

论坛徽章:
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
发表于 2013-12-02 11:18 |显示全部楼层
本帖最后由 yulihua49 于 2013-12-02 11:20 编辑
iw1210 发表于 2013-12-02 11:00
2.2 select 模型

1. 最大并发数限制,因为一个进程所打开的 FD (文件描述符)是有限制的,由 FD_ ...

3.2. 效率提升, Epoll 最大的优点就在于它只管你“活跃”的连接 ,而跟连接总数无关,因此在实际的网络环境中, Epoll 的效率就会远远高于 select 和 poll 。

3.3. 内存拷贝, Epoll 在这点上使用了“共享内存 ”,这个内存拷贝也省略了


3.2,扫描的是激活的fd,而不是全部fd,如果全部fd是65535,激活的只有一个,怎样?
活动的fd只需要硬中断触发,无需扫描。

论坛徽章:
0
发表于 2013-12-02 11:51 |显示全部楼层
本帖最后由 iw1210 于 2013-12-02 13:49 编辑
yulihua49 发表于 2013-12-02 11:12
这无需说。大量链接塞死数据库的实例还少吗, ...

123o6怎么憋死的,没时间去研究这个东西,应该是开发者技术水平差或其他什么鸟原因,但肯定不是数据库承受不住大量连接数的原因。想用一国造的数据库应用否定全世界的数据库技术,有点滑稽,何况还是一个科学技术高度发达的裹加 :)。
拿出这个东西做论据,没人相信。

论坛徽章:
0
发表于 2013-12-02 12:09 |显示全部楼层
本帖最后由 iw1210 于 2013-12-02 13:28 编辑

回复 68# yulihua49


“Epoll 最大的优点就在于它只管你“活跃”的连接” ,”Epoll扫描的是激活的fd,而不是全部fd“,无非还是在小范围用遍历 ,难道它做到像汇编的中断处理?

“内存拷贝, Epoll 在这点上使用了共享内存 ”,它这里不内存拷贝了,其他地方用内存拷贝,最后都逃不了内存拷贝。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP