Java NIO 理解

按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO,按照POSIX标准来划分只分为两类:同步IO和异步IO。如何区分呢?首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO,如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO。阻塞IO和非阻塞IO的区别在于第一步,发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO;

<font color=#00ffff size=72>color=#00ffff</font>

那么JAVA NIO又是怎么一回事呢?

Java NIO为非阻塞IO、所以在第一部发起IO请求的时候、当前进程不是阻塞的、可以继续干其他的事情、JAVA NIO使用了一个Selector

来轮询、当数据准备好的时候、操作系统会通知应用程序进行处理、应用在将流读取到缓冲区或写入操作系统 ,selector轮询到有数据的来到的时候、

启动一个线程去处理、此时该线程必定能读取到数据、因为链接已经有了数据了!

也就是说,这个时候,已经不是一个连接就要对应一个处理线程了,而是有效的请求,对应一个线程,当连接没有数据时,是没有工作线程来处理的。

猜你喜欢

转载自blog.csdn.net/chengzheng_IT/article/details/51348775