我在把我们的Java代码中使用NIO的过程,但我不知道的最好的方式来设计的。

我最初的方法是创建选择的线程的池。该线程开始/按需死亡,通道注册到选择线程它们在连接时/在循环的方式接受。从那里,对选择(),并且每个线程块时唤醒将运行与具有选择的键每个信道相关联的适当的回调。

除了这种“多重选择器线程”的设计,我也看到有人说使用一个单一的选择线程,调度线程池。当IO操作准备好被执行时,选择器通知调度程序线程,然后处理该请求。这种模式有没有阻塞IO线程的利益,但现在我们是在强迫所有的IO到一个单独的线程与同步/事件队列调度处理。

此外我将不能够使用一个单一的直接字节缓冲区读取每个信道,直接传递入回调。相反,我不得不将数据复制每一个读发生到一个数组和复位超时。 (我认为..)

什么是实现这个的最佳方式?

有帮助吗?

解决方案

看一看在反应堆模式

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

你希望你选择的工作真的取决于你的用例。 (连接数,邮件大小等)

什么是你正在试图通过从IO转换为NIO来解决这个问题?

其他提示

您真的应该看看米娜,

http://mina.apache.org/

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

另外看看网状这实在是快,功能丰富,也是在大系统和大公司使用像红帽(JBoss的),推特,脸谱......。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top