linux下网络编程:select异步通信的效率问题

linux下网络编程,服务端一般采用异步方式,提高响应速度。

一般的模型是:

1个Event Thread + 几个 (根据cpu核数而定)TaskThread。

Event Thread负责监听端口,接受连接,然后将连接socket分配给TaskThread处理。

我的程序中,Event Thread和TaskThread都使用select异步通信。

如上所说,这种方式可以提高响应速度,缺点是cpu在多个线程中切换,cpu占用率高。

为了在两者间做一个平衡,做了一个测试。


实验1

实验条件:

win7/rhel5.5,硬件相同。

实验过程:

A 50个连接由50个TaskThread处理,

B 50个连接由1个TaskThread处理。

实验预期:

A的cpu占用率远高于B.

实验结果:

windows(win7)上,符合预期。

linux(rhel5.5)上,完全相反。


实验结论:

猜想1.rhel5.5作为专业服务器,对线程调度几乎不花时间。

猜想2.rhel5.5上,select随着FDSET的增大,处理时间远高于线性增长。



实验2

实验条件:

同上

实验过程:(与实验1中A对照)

C 50个连接由2个TaskThread处理。

实验结果:

windows(win7)上,符合预期。

linux(rhel5.5)上,两者持平。

实验结论:

看来猜想2的可能大一些。


实验3

实验条件:

同上

实验过程:

D 1个TaskThread处理1到50个连接,逐次增加。

记录10,20,30,40,50个连接时,select的处理时间,验证上面的猜想2。



土鳖




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值