找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3393|回复: 3

跪求阿!

[复制链接]
发表于 2010-12-28 11:32:47 | 显示全部楼层 |阅读模式
我想测试2000个连接服务器建立时间,测试代码启动了20线程,每个线程启动100个主动连接,我测试了下,需要花费大概3分钟,是不是太慢了,因为采用对象池,基本上make_svc和connect_handler,open基本上不花费多大时间,但为什么这么慢?
同时我还发现,如果我采用for循环发起100个连接,端口假如从100-200,因为采用阻塞连接,所以可以认为必定为端口为150的connect_handler的open肯定比端口为156的open先调用,但我测试为什么发现,有部分端口号靠后的open先调用,换句话说端口号某些靠后的现建立了连接。这是为什么?
发表于 2010-12-28 18:59:43 | 显示全部楼层
1、这种使用线程的模式很低效,因为线程消耗资源、线程的切换更消耗资源。
2、在现代OS上面,线程都是抢占式调度,所以后创建的线程先调度运行并不奇怪。
不要用这种模式做服务器系统,正确的办法,是使用线程池,合理的预先创建合适数目(跟硬件相关)的线程做业务处理,用队列来排队,尽量避免处理过慢导致阻塞。
发表于 2010-12-29 11:20:46 | 显示全部楼层
按你说的情况,
如果你是1个线程for 100次connect(顺序指定连接者的端口100-200),
看你用的是reactor模型,由于是同步调用,不应该出现后发先至的情况。

另外对于你说测试慢的问题,其实很简单,
既然是同步调用,在几个关键点把时间记录下来,
最后写道一个csv文件里分析即可。
(任何你熟悉度的格式,csv的好处是可以直接使用excel作图)。
 楼主| 发表于 2010-12-29 15:22:36 | 显示全部楼层
谢谢!我再好好学学
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-16 23:52 , Processed in 0.014347 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表