免费注册 查看新帖 |

Chinaunix

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

[算法] 超高性能网络编程, Asynchronous network I/O [复制链接]

论坛徽章:
0
91 [报告]
发表于 2008-09-09 18:00 |只看该作者
原帖由 wwwsq 于 2008-8-28 09:06 发表
http://www.xmailserver.org/linux-patches/nio-improve.html

测试说明dual PIII 1GHz, 256 Mb RAM的机器,每秒可以处理约27500个128字节的http请求。

“2cpu  4核机器” 比 “dual PIII 1GHz”的性能高五 ...





不reasonable,我怎么能实现呢。


不过,这个效率我还能提高不少,以前取数据耽误不少时间,我要是愿意可以把取数据的效率提高50倍。
等有人超过我了,我再做改进,现在懒得动。

论坛徽章:
0
92 [报告]
发表于 2008-09-09 18:07 |只看该作者
QQ服务器是怎样的架构?

论坛徽章:
0
93 [报告]
发表于 2008-09-09 19:17 |只看该作者
原帖由 wyezl 于 2008-9-9 17:52 发表

不是类似路由的东西,而是一个类似apache的东西。
当然,如果我愿意,我可以稍微修改就能成为高效的类似路由的东西或者一个高效的代理服务器。
低层技术都不变,作为什么服务,只是一种表现。

50w ...



如果每秒15w的http请求是通过长连接实现的,那就比较好理解,我见过一个服务器每秒钟处理100w+的request,每个request大概十几个字节。

据我所知accept的时候socket底层是要做很多分配buffer之类的体力活的,对于长连接,那么请求只是数据流。

论坛徽章:
0
94 [报告]
发表于 2008-09-09 19:19 |只看该作者
原帖由 wyezl 于 2008-9-9 18:00 发表

不reasonable,我怎么能实现呢。

不过,这个效率我还能提高不少,以前取数据耽误不少时间,我要是愿意可以把取数据的效率提高50倍。
等有人超过我了,我再做改进,现在懒得动。



取数据的效率提高50倍,是把accept和recv合并为一次内核操作吗?或者是把自己的程序变成一个kernel module ?

论坛徽章:
0
95 [报告]
发表于 2008-09-09 21:06 |只看该作者
原帖由 Kendiv 于 2008-7-20 16:01 发表
实际的说,基于Generic OS(Linux/*nix/Windows)的Network I/O都存在理论速度上限的瓶颈,因为OS自身的开销(任务切换,虚拟内存转换等),总线的时延,较低的总线带宽等等都会大幅降低I/O性能,而这是软件本身 ...


采用NP方案一般适合路由器这种IP层的处理。如果用NP来实现基于TCP的应用层(如web), 应该怎么架构呢?

论坛徽章:
0
96 [报告]
发表于 2008-09-10 15:06 |只看该作者
原帖由 cookis 于 2008-7-18 10:35 发表
你为什么用红黑树呢, 红黑树只是查找快一些, 但timeout这种机制只是需要得到最大或最小的元素, 堆结构正适合

使用复杂数据结构的话都有维护的成本, 多线程情况下, 还需要加锁处理
不如设定一个超时轮询线程, 将所有现有的连接按时间戳排序, 然后依次排除

论坛徽章:
0
97 [报告]
发表于 2008-09-10 15:19 |只看该作者
原帖由 wwwsq 于 2008-9-9 19:17 发表



我见过一个服务器每秒钟处理100w+的request,每个request大概十几个字节。

...


哥们这服务器什么配置。网络I/O能达到这个数?

论坛徽章:
0
98 [报告]
发表于 2008-09-11 17:55 |只看该作者
原帖由 wyezl 于 2008-9-10 15:19 发表


哥们这服务器什么配置。网络I/O能达到这个数?



千兆网。

100w乘以15字节=15M字节。

论坛徽章:
0
99 [报告]
发表于 2008-09-12 11:51 |只看该作者
原帖由 wyezl 于 2008-8-7 16:51 发表
sports.sinajs.cn  单机每秒可以处理15w+ http请求,支撑50w+  connections同时在线.在2cpu  4核机器上测试。
hq.sinajs.cn  每天上百亿http请求。

系统资源都比较空闲,负载比较低。。。

刚刚看到有人说, 受限于 non-paged Kernel memory, 4G 内存的 windows 系统, 同一时间 15w 左右的 socket 是极限
不知道 linux/unix 的情况怎么样?

论坛徽章:
0
100 [报告]
发表于 2008-09-12 12:35 |只看该作者
原帖由 wwwsq 于 2008-9-11 17:55 发表



千兆网。

100w乘以15字节=15M字节。


只知其一不知其二。

先不算要维持一个http只连接,http头至少要70多字节,只发个hello world加起来也要80字节。



就算只发15个字节,千兆网又能如何,普通网卡一秒也就只能发20w个包。
按你的说法,我如果每个包一个字节,那么一秒发500w个包也很轻松了。。。

就算我用最好的网卡,按我说的这样的普通服务器,每秒50w http处理量,绝对世上罕见,不过对我来说不是很难实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP