NOTE
3.1 三大IO的对比
1. Java IO 和 系统调用的关系 1.1. 系统调用的IO类型 IO模型.md 2. Java IO分类 2.1. BIO 同步阻塞 IO:a connection to a thread。 在服务端需要使用多线程处理多个客户端连接和读写请求。一般ServerSocket一个线程(accep
这是历史学习笔记,可能存在过时或不完整的理解。
1. Java IO 和 系统调用的关系

1.1. 系统调用的IO类型
2. Java IO分类
2.1. BIO
同步阻塞 IO:a connection to a thread。 在服务端需要使用多线程处理多个客户端连接和读写请求。一般ServerSocket一个线程(accept新连接),每个客户端Socket都是一个线程(read or write) 属于IO模型中的同步阻塞

2.2. NIO
同步非阻塞 IO:a request a thread。
在服务端可以使用一个线程处理多个客户端连接和读写请求。一般由一个selector监听客户端连接(accept新连接),每个连接过来会生成一个Channel,selector会轮询这些Channel,有事件发生交由应用处理(read or write)
属于IO模型中的IO多路复用,Linux上使用epoll实现。

2.3. AIO
异步非阻塞IO:a valid request a thread。
在服务端可以使用一个线程处理多个客户端连接和读写请求。相对于NIO来说不需要我去同步轮询,而是异步交由操作系统处理,处理完了回调告知我即可
这是一个接口标准,操作系统可以实现,也可以不实现。Linux就没有实现。
属于IO模型中的异步IO。在Linux中使用epoll实现,在Windows中使用IOCP实现

3. IO 对比
3.1. NIO VS BIO
| BIO | NIO | |
|---|---|---|
| 面向流 | 面向缓冲区 | |
| 阻塞 | 非阻塞(可以处理其他事) | |
| 无 | 选择器(单线程即可服务多个Channel) |