netty和java nio的区别

Java NIO framework mina在netty性能、链接数量、并发性和其他压力测试参数方面都优于mina。

NIO弥补了原有I/O的不足,它在标准的java代码中提供了高速的、面向块的I/O。

警队的输入/输出库与NIO的最大分别是数据包装和传送的方式。原始I/O以流的方式处理数据,而NIO以块的方式处理数据。

NIO基于通道channel和Buffer实现面向块的IO数据处理,MINA是开源的。

JavaNIO非阻塞应用通常适用于I/O读写等。我们知道系统运行的性能瓶颈通常是I/O读写,包括端口和文件的操作。以前打开一个I/O通道后,read()会一直等待读取端口端的字节内容。如果没有内容进来,read()会很傻,会影响我们的程序继续做其他事情,所以改进就是打开它。

Java NIO无阻塞技术实际上采用了Reactor模式,或者说Observer模式来为我们监控I/O端口,如果有任何内容进来,它会自动通知我们,这样我们就不用启动多线程死等。从外部来看,实现了I/O读写流畅,不阻塞。

Java NIO的出现不仅是技术性能的提升,也是互联网上对它的介绍,因为它是一个里程碑。从JDK1.4开始,Java开始改进性能相关的函数,使Java在底层或并行分布式计算等操作上与C或Perl等语言并驾齐驱。

如果你还怀疑Java的性能,那说明思想和概念已经完全过时了,再过一两年就要用新的术语来定义Java了。从JDK1.5开始,需要提供对线程、并发等新特性的支持。Java应用在游戏等适时领域的机会已经成熟。在稳固了自己的中间件地位之后,Java开始蚕食传统的C领域。

原则:

NIO有一个主类选择器,类似于一个观察器。只要我们告诉选择器我们需要查找socketchannel的什么内容,我们就会做其他事情。当事件发生时,他会通知我们并返回一套选择键。我们将读取这些密钥,并获取我们刚刚注册的socketchannel。然后,我们就从这个通道读取数据,放心,我们一定能读取,然后我们就可以处理数据了。选择器的内部原理其实就是对注册的通道做一次轮询访问,并保持轮询(这是目前唯一的算法)。一旦注册的通道被轮询,就会发生一些事情。比如数据来了,他会站出来汇报,递一把钥匙,让我们通过这把钥匙读取这个频道的内容。在使用上也分两个方向,一个是螺纹加工,一个是非螺纹加工,后者相对简单。