10

我在 Minecraft 和 JIrcs 等几个应用程序源中看到它们都使用 java.io 来实现 Reactor 插件(如果我没记错的话)以及在这篇文章中。那么,实现 Reactor Pattern 时 java.io 和 java.nio 有什么区别呢?我的意思是,像性能优势、流程效率等,如果你认为 java.io 是实现反应堆模式的好解决方案,我可以在哪里获得好的教程(因为谷歌给了我大量的 java.nio tuts 而不是我想要的 java.io)

4

3 回答 3

1

NIO 更快并不是真的。保罗·泰玛( Paul Tyma)在某个时候打破了这个神话

http://mailinator.blogspot.in/2008/02/kill-myth-please-nio-is-not-faster-than.html

http://paultyma.blogspot.in/2008/03/writing-java-multithreaded-servers.html

希望有所帮助。

于 2014-05-23T11:30:20.843 回答
0

我希望您能从本书 第 42 页的以下信息中得出一个结论

java.io.* 类使用装饰器设计模式。装饰器设计模式在运行时将责任附加到对象。装饰器比继承更灵活,因为 继承在编译时将责任附加到类。java.io.* 类使用装饰器模式基于一些基本类在运行时构造不同的行为组合。

和 43。

Java 不再适合开发执行大量 I/O 操作的程序。此外,通常需要的任务,例如文件锁定、非阻塞和异步 I/O 操作以及将文件映射到内存的能力都不可用。非阻塞 I/O 操作是通过多线程或使用 JNI 等变通方法实现的。新的I/O API(又名NIO) 在 J2SE 1/4 中改变了这种情况。服务器能否有效处理多个客户端请求取决于它如何使用 I/O 流。当服务器必须同时处理数百个客户端时,它必须能够同时使用 I/O 服务,在 Java 中满足这种情况的一种方法是使用线程,但线程的比例几乎是一比一(100 个客户端将有 100 个线程)容易产生异常的线程开销,并且由于内存堆栈的消耗(即每个线程都有其堆栈,请参阅Java 部分中的Q34Q42 )和CPU 上下文切换,可能会导致性能和可伸缩性问题(即在线程之间切换,而不是进行真正的计算。)。为了克服这个问题,Java 平台的 java.nio 包中引入了一组新的非阻塞 I/O 类。非阻塞 I/O 机制是围绕选择器和通道构建的。ChannelsBuffersSelectors是 NIO 的核心。

阅读更多。以下是一些提供 Java IO 与 Java NIO 的参考链接: Java IO 比 NIO 更快——旧的又是新的!, Java IO vs Java NIOIO vs. NIO – 中断、超时和缓冲区

于 2013-01-26T11:54:41.580 回答
0

了解阻塞和非阻塞 I/O 之间的区别很重要。该java.io软件包不支持非阻塞 I/O,因此它不会针对大量连接进行扩展。此外,对于阻塞 I/O,您只能求助于可怕的单客户端对一线程模型,这完全不适合低延迟系统。我建议你看看我写的这篇关于实现反应器模式的异步网络 I/O 库的文章,这样你就可以了解非阻塞在高性能系统中是如何发挥关键作用的。

于 2014-05-23T03:11:12.957 回答