我在Minecraft和JIrcs这样的应用程序源中看到,他们都使用java.io来实现Reactor Plugin(如果我没有错),也在这个article中。那么,实现Reactor Pattern时java.io和java.nio有什么区别?我的意思是,像性能优势,流程效率等,如果你认为java.io是实现Reactor Pattern的好解决方案,我可以获得良好的教程(因为谷歌给了我大量的java.nio tuts而不是我想要的java.io)
答案 0 :(得分: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
希望有所帮助。
答案 1 :(得分:0)
我希望您能通过以下information taken from the book得出结论 在第42页
java.io. *类使用装饰器设计模式。装饰者 设计模式在运行时将责任附加到对象。 装饰器比继承更灵活,因为 继承在编译时将责任附加到类。 java.io. *类使用装饰器模式构造不同的 基于某些基本类的运行时行为组合。
和43。
Java不再适合开发执行某项计划的程序 很多I / O操作。此外,通常需要的任务,如文件 锁定,非阻塞和异步I / O操作和能力 映射文件到内存不可用。非阻塞I / O操作 是通过多线程或使用JNI等工作实现的。 J2SE 1/4中的新I / O API (又名 NIO )已更改此设置 情况。 服务器有效处理多个客户端请求的可用性取决于它如何使用I / O流。当服务器必须时 同时处理数百个客户端,它必须能够使用I / O. 服务并发,在Java中迎合这种情况的一种方法是 使用线程,但几乎一比一的线程(100个客户端 将有100个线程)容易出现异常的线程开销并且可以 由于完善而导致性能和可扩展性问题 内存堆栈(即每个线程都有其堆栈,请参阅 Q34 , Q42 在Java部分中)和 CPU上下文切换(即在线程之间切换而不是进行实际计算)。要克服 这个问题,一组新的非阻塞I / O类已经存在 在java.nio包中引入Java平台。非阻塞 I / O机制围绕选择器和通道构建。 渠道下, 缓冲区和选择器是NIO的核心。
和read more。 以下是一些提供Java IO与Java NIO的参考链接: Java IO Faster Than NIO – Old is New Again!,Java IO vs Java NIO和IO vs. NIO – Interruptions, Timeouts and Buffers。
答案 2 :(得分:0)
了解阻塞和非阻塞I / O之间的区别非常重要。 java.io
包不支持非阻塞I / O,因此它不会扩展到大量连接。此外,通过阻塞I / O,您只能使用可怕的 one-client-to-one-thread模型,这完全不适合低延迟系统。我建议你看看我写的关于实现反应器模式的异步网络I / O库的this article,这样你就可以理解非阻塞如何在高性能系统中发挥关键作用。