用select或者所谓的reactor模式会不会比多线程收数据更慢

assassin5616 2010-04-10 07:29:31
最简单的例子,假设只有三个socket连接,TCP或者UDP的都可以,应该区别不大,只考虑读

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

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

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

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

我知道还有使用proactor的方法,可是linux对异步I/O支持不好,所以就不在这里讨论了。
...全文
191 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
assassin5617 2010-04-13
  • 打赏
  • 举报
回复
没人回复啊,只好我自己来了。应该是多线程的更快一些。ACE_TP_Reactor基本上就是每个线程起一个ACE_SELECT_REACTOR。

而且直接接收也要比用select再接收更快,不过那样不能实现控制反转。
assassin5616 2010-04-12
  • 打赏
  • 举报
回复
自己顶一下
assassin5616 2010-04-12
  • 打赏
  • 举报
回复
再顶一下,等高手来

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧