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

来源:互联网 发布:第三方支付有哪些 知乎 编辑:程序博客网 时间:2024/05/18 19:22

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。



土鳖




原创粉丝点击