IO 和 NIO 的区别

IO阻塞IO,面向流;当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入,该线程在此期间不能再干任何事情了;可以有少量的连接使用非常高的带宽,一次发送大量的数据

如图:Java IO:  一个连接通过一个线程处理。

NIO非阻塞IO,面向缓冲;使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情;使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。

如图:Java NIO: 单线程管理多个连接。

猜你喜欢

转载自www.cnblogs.com/liuqing576598117/p/10304221.html