头脑发热地搞山寨:StacklessIO 动手篇

接续着头脑发热地搞山寨:StacklessIO YY篇,YY后,就开始动手:

首先是命名,由于是寨品,所以也来个寨明: StacklessIOFQ

为毛是FQ,请留意在下头像。


按照YY篇分析出来的模型动手,直接挪用之前玩过的stackless socket,

建立进程、socket管理都很顺利地完成了,缓存、共享内存这个花了点功夫,还是完成了,

之后是提供用户入口和启动方式,纠结了一小段时间,怎么让它用起来更弱智;


俺选择的做法就是,用户只需在启动时,传入send和receive函数,即可通过这两个自定义的处理函数进行无节操收发数据;

这样做的一个目标是,StacklessIOFQ与用户项目模块耦合性较低,可以在运行时把它分离、更换。


另外一点,stackless socket使用了select,而俺做了一点修改,用epoll;

详细代码就不贴了,模型非常简单,俺的代码风格远不像那些老外的库那么专业,大侠们实现起来估计没啥难度,再敢贴代码就是惹笑话,

不过还是负责地上传了资源:

http://download.csdn.net/detail/zeng_jiang/4342260

留意说明,慎用...


于是,直接公布测试结果:


环境:

cpu:AMD Athlon II X2 240

内存:2G

网卡:Realtek RTL8168C(P)/811C(P)

OS :Windows XP上跑VirtualBox内的ubuntu

网络环境:本机收发 + 局域网收发

概括:标准的屌丝装备


测试方法:

·建立一定数量的长连接;

·从用户模块(user)接收到第一个包记时a;

·重复:所有长连接同时sendall(for   n);

·用户模块(user)接收到最后一个包记时b;

·得到时间差c = (b - a)/n;

·有够土方法吧,俺是民工俺认了。


结果:

测试长连接数:5000

局域网测试结果:c的平均成绩是0.05~0.06

本机收发测试结果:c的平均成绩是0.05~0.055

粗糙又微妙的结果...


在这个测试中,网络方面的延时几乎可以忽略,也就是,测试的具体对象,是StacklessIOFQ的数据吞入能力;

用一个情景来描述这次测试结果就是:

--有5000个人同时连着服务器;

--排除掉所有网络延时数据库处理或者其它运算的耗时;

--如果这5000个人在几乎同一个毫秒这么精确的时间片内同时给服务器发包;

--最倒霉的那个人要比最幸运的那个人多耗时0.06秒才能等到自己的包被处理。


这样的结果可接受否?

如果在玩网络游戏的人,应该可以有办法从官方提供的网络延时信息中,看到自己的网络延时,

一般来说,网络状况较好的,延时可以缩小到30~40ms,就算有60ms,也是可以接受的,

也就是说,现在StacklessIOFQ对于5000个请求的瞬时处理,最糟糕的情况下比网络延时还TMD大噢噢噢噢

好吧浪费各位这么多时间看这种东西俺蹲墙角反省去。


提升:

该模块处理效率上其实还有提升空间,毕竟那个测试的模块还新鲜出炉没经过风雨;

自我安慰一句:屌丝装备怎么跟刀片机比,跑纯linux 4核机子至少可以再提高0.01s甚至0.015s的成绩(大概、可能、应该...);

最重要的,几乎是纯python的要跟c来拼承压,还不如叫俺去跟绿巨人拼力气...


另外:

细心的人会发觉,这个测试,还有那个资源里面的模块,咋的有 I 没O啊;

因为,输出模块俺有了新的想法,打算搞分布式输出;

当然,会在后面花点时间补充上send模块,不过其实策略和 I 模块大同小异,不罗嗦;

其实,因为俺是懒鬼,头脑发热过后,就萎了;

最后,主要是因为兴趣转移到另一些地方去了,于是对于StacklessIOFQ的完善提升和维护,稍稍放后一点吧。



能看到这里的各位,辛苦了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值