用什么?线程池或选择器或轮询或epoll(libev库)

时间:2013-03-11 10:37:09

标签: android sockets css-selectors nio epoll

我的Android(2.3及以上版本)应用程序需要与100个(最多)同时运行TCP服务器的嵌入式设备进行TCP通信。

智能手机应用程序应足够强大,可同时处理100多个连接。它需要经常设置/获取信息。因此,对于网络模块,我们分析了以下选项:

  • 第一个备选方案:拥有一个线程管理器(ThreadPoolExecutor)并为每个设备建立连接。
    • 可能的问题:制作100个帖子是不可行的。
  • 第二替代方案:使用Java NIO选择器维护每个fd。
    • 问题:Java NIO似乎很慢。你要求他们检查的描述符越多,他们就越慢。
  

while(mMainSelector.select(SELECTOR_TIMEOUT){            ....获取所选键的东西....            SocketChannel socketChannel = channel.accept()

从客户端开始连接到上述代码到达最后一行(channel.accept())的时间大约需要1-3秒。

另外,为了确认我的测试,我推荐了一些博客,支持这一点。

Avoid NIO

NIO not faster than IO

  • 第三替代方案:epoll:比选择器更好,但我想它在Android中不易提供。 有人在Android中使用过epoll吗?我们是否有针对Android的libev build?

还有其他替代方案最适合处理100个同步连接而不影响速度吗?

0 个答案:

没有答案