代码之家  ›  专栏  ›  技术社区  ›  Stephen

NIO实现的最佳模型?

  •  6
  • Stephen  · 技术社区  · 16 年前

    我正在把Java代码转换成使用NIO的过程,但我不确定设计它的最佳方式。

    我最初的方法是创建一个选择器线程池。线程根据需要启动/终止,当通道以循环方式连接/接受时,通道注册到选择器线程。从这里开始,select()上的每个线程都会阻塞,当唤醒时,会运行与具有选定键的每个通道相关联的相应回调。

    除了这种“多选择器线程”的设计,我还看到人们说要使用一个选择器线程和一个调度线程池。当IO操作准备好执行时,选择器通知调度程序线程,然后调度程序线程处理请求。这个模型的优点是不阻塞IO线程,但是现在我们将所有IO强制为一个线程,并在调度程序中处理同步/事件队列。

    此外,我不能使用单个直接字节缓冲区来读取每个通道,直接将其传递到回调中。相反,每次读取到数组中并重置时,我都必须将数据复制出来。(我想……)

    实现这一点的最佳方法是什么?

    4 回复  |  直到 10 年前
        1
  •  4
  •   pjp    16 年前

    看看 反应器型式

    http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf

    您希望选择器如何工作实际上取决于您的用例。(连接数、消息大小等)

    您试图通过将IO转换为NIO来解决什么问题?

        2
  •  3
  •   ZZ Coder    16 年前

    你真的应该看看米娜,

    http://mina.apache.org/

    它解决了你提到的所有问题。

        3
  •  3
  •   NullUserException Mark Roddy    14 年前

    我找到了 ROX Java NIO Tutorial 对于开始使用NIO很有用。

    Grizzly 是另一个NIO框架(类似于Mina)。

        4
  •  1
  •   Narendra Pathai    10 年前

    也可以看看 netty 它速度非常快,功能丰富,也被大系统和大公司使用,如Redhat(JBoss)、Twitter、Facebook….