NIO其实没什么作用
非阻塞,非阻塞其实就是channel的write和read不会阻塞,读不到或是写不出去方法会马上返回,但是如果你能读有能写,但是得花时间读写呢,我想这样其实和单线程处理所有请求的情况一样了吧 。
首先如果有读有写,还得花时间读写呢?这个是同步IO和异步IO的问题,异步IO可以不让应用程序关心怎么读写数据,只需要传递内存缓存区给内核就OK了,内核负责读取,但是目前JAVA的IO都是同步IO,NIO属于同步非阻塞IO。
至于非阻塞IO肯定是有好处,比如在使用同步阻塞IO的时候,因为线程是一种很昂贵的资源,如果每一个请求过来,都分配一个线程处理的话,就会因为某些任务的阻塞,而使得线程处于阻塞状态,而如果有一个线程专门负责轮训的话,这样所有真正实现读写操作的线程就不会阻塞,每次都是可读或者可写的时候,才会真正的将channel于线程关联,从而不会占用宝贵的系统资源而啥都不干,这样线程话的时间都是真正读取和写入数据的事件了,而取消了阻塞的时间,这样在系统资源一定的情况下,会更好的榨取CPU的性能。
另外JAVA7好像要支持异步IO,而异步非阻塞IO,更本不用应用关系如何读取数据,有内核来完成,但是这也需要操作系统从底层支持异步IO,不过我们可以通过Proactor来模拟异步IO的实现。