用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再接收更快,不过那样不能实现控制反转。