首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

用select或者所谓的reactor模式会不会比多线程收数据更慢,该如何解决

2012-03-04 
用select或者所谓的reactor模式会不会比多线程收数据更慢最简单的例子,假设只有三个socket连接,TCP或者UDP

用select或者所谓的reactor模式会不会比多线程收数据更慢
最简单的例子,假设只有三个socket连接,TCP或者UDP的都可以,应该区别不大,只考虑读

第一种方案:把这三个socket连接都加到fd_set里面,然后用select来判断是否有某个socket可读,再进行读取。

第二种方案:这三个socket连接分别属于三个不同的线程,每个线程可以用select,也可以用阻塞的办法读数据。

谁能告诉我这两种方案哪个更快?第一种方案用得最多,reactor模式基本就是这个样子,可是问题是读取数据只能一个一个socket地读,而第二种方案,三个可以同时读,感觉更快。

还有种可能就是从不同的socket中读取数据的操作其实是串行的,所以虽然起了三个线程,结果还是一个一个顺序来,而且因为多了线程的开销,反而更慢。

我知道还有使用proactor的方法,可是linux对异步I/O支持不好,所以就不在这里讨论了。


[解决办法]
没人回复啊,只好我自己来了。应该是多线程的更快一些。ACE_TP_Reactor基本上就是每个线程起一个ACE_SELECT_REACTOR。

而且直接接收也要比用select再接收更快,不过那样不能实现控制反转。

热点排行