Java NIO实现的最佳模型?
我正在将java代码转换为使用NIO,但我不确定设计它的最佳方法 我最初的方法是创建一个选择器线程池。线程会根据需要启动/终止,通道以循环方式连接/接受时会注册到选择器线程。从那里,每个线程阻塞select(),当唤醒时,将运行与具有选定键的每个通道相关联的相应回调 除了这种“多选择器线程”设计之外,我还看到有人说使用一个选择器线程和一个调度线程池。当IO操作准备好执行时,选择器通知调度程序线程,然后调度程序线程处理该请求。此模型的优点是不阻塞IO线程,但现在我们将所有IO强制到单个线程中,并在dispatcher中处理同步/事件队列 此外,我无法使用单个直接字节缓冲区来读取每个通道,将其直接传递到回调中。相反,每次读取数组并重置时,我都必须将数据复制出来。(我想……)Java NIO实现的最佳模型?,java,nio,Java,Nio,我正在将java代码转换为使用NIO,但我不确定设计它的最佳方法 我最初的方法是创建一个选择器线程池。线程会根据需要启动/终止,通道以循环方式连接/接受时会注册到选择器线程。从那里,每个线程阻塞select(),当唤醒时,将运行与具有选定键的每个通道相关联的相应回调 除了这种“多选择器线程”设计之外,我还看到有人说使用一个选择器线程和一个调度线程池。当IO操作准备好执行时,选择器通知调度程序线程,然后调度程序线程处理该请求。此模型的优点是不阻塞IO线程,但现在我们将所有IO强制到单个线程中,并在
实现这一点的最佳方式是什么 你真的应该调查一下米娜
它解决了您提到的所有问题。看看反应器模式 您希望选择器如何工作实际上取决于您的用例。(连接数、消息大小等)
通过将IO转换为NIO,您试图解决的问题是什么?另外,您还可以了解哪些操作非常快速、功能丰富,并且在大型系统中以及Redhat(jboss)、Twitter、Facebook等大公司中使用 是的,尽管这是一个好主意,试着去了解封面下发生了什么。这正是我所做的。我并没有在我的项目中真正使用Mina,但我从阅读他们的实现、性能和可伸缩性中学到了很多。线程少了很多,这将简化我们的设计。Reactor模式是一个很好的选择。此设计的一些实现使用多个线程来处理I/O事件。这些设计很糟糕,无法达到非阻塞异步I/O的目的。在为高性能和可扩展的服务器编写设计时,您希望使用异步I/O调用,并将所有调用保持在一个线程上—
选择器
线程。