1、BIO(block io 同步阻塞模式)
1. BIO模式问题
1.1 阻塞问题
- 服务端在接收客户端套接字请求时,accept() 方法阻塞等待:一直等到有客户端接入时才往下执行。
- 客户端写数据时,阻塞:一直停留在wirte() 这行代码,直到把所有的消息全部写出去,并且服务端接受到消息。
1.2 多线程问题
服务端接收套接字后,都需要开辟一个线程进行处理,非常消耗服务器的性能。
2、NIO(none block io 同步非阻塞模式)
buffer缓冲区、channel管道、Selector多路复用器
2.1 Selector
多路复用器的作用:轮询,轮询每个channel管道,查看是否读事件、写事件,若有则处理。通过一个Selector多路复用器,就可以同时处理很多的客户端请求,大大提高了效率,降低了系统开销。
2.2 NIO和BIO本质上属于同步IO
同步:服务端处理客户端请求需要主动查看客户端的消息。
3、AIO(asychronous IO 异步非阻塞模式)
不需要selector多路复用器在管道之间轮询查看,aio是事件驱动形式。也就是当客户端发送数据之后,会主动通知服务器,接着服务器再进行读写操作。