微信搜索《Java鱼仔》,每天一个知识点不错过
(一)每天一个知识点
Java中BIO、NIO、AIO 有什么区别?
(二)结论
同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。
BIO即同步阻塞IO,实现模型为一个连接就需要一个线程去处理。这种方式简单来说就是当有客户端来请求服务器时,服务器就会开启一个线程去处理这个请求,即使这个请求不干任何事情,这个线程都一直处于阻塞状态。
BIO模型有很多缺点,最大的缺点就是资源的浪费。想象一下如果QQ使用BIO模型,当有一个人上线时就需要一个线程,即使这个人不聊天,这个线程也一直被占用,那再多的服务器资源都不管用
NIO使用了多路复用器机制,以socket使用来说,多路复用器通过不断轮询各个连接的状态,只有在socket有流可读或者可写时,应用程序才需要去处理它,在线程的使用上,就不需要一个连接就必须使用一个处理线程了,而是只是有效请求时(确实需要进行I/O处理时),才会使用一个线程去处理,这样就避免了BIO模型下大量线程处于阻塞等待状态的情景。
AIO是在JDK1.7中推出的新的IO方式--异步非阻塞IO,也被称为NIO2.0,AIO在进行读写操作时,直接调用API的read和write方法即可,这两种均是异步的方法,且完成后会主动调用回调函数。简单来讲,当有流可该取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当保作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。
(三)再多学一点
有关Java中BIO、NIO和AIO,我专门写过一篇博客,大家可以看一下: