1.IO:与 磁盘,文件,网络接口 等 系统共享资源,之间建立通道,并且传输数据的行为 叫 IO
IO分为 inputStream 和 OutputStream,一个IO指令操作,可能是I,可能是O(例如 写文件),可能是IO(例如 网络请求)
2.IO 指令:cpu执行线程中的io指令,发生IO行为的 叫 IO指令,IO指令可以是 阻塞IO指令,非阻塞IO指令,和IO通道没有关系,IO通道只是前提
3.IO指令 需要 cpu执行 , 但是 IO(这种 传输 数据的行为)不用cpu执行
4.IO设备:内存 -> IO通道 -> 与内存建立IO通道的另一端,另一端是,磁盘,文件,网络,键盘灯,一般分为2种:用户和非用户,而用户操作的另一端,就是IO设备,简单来说,键盘,鼠标就是IO设备
5.IO 通道:只要有 IO行为,就必定有 IO通道,注意 io通道 是计算机内部的,与 网络channel,connection不同,即 IO指令(内存) -> 开启 io通道 ->
共享资源(磁盘,文件,网络),当涉及到 网络的时候,那么 网络会与另一端网络ip开启 一个网络通道(通过网线)完成数据传输,而这个 不叫IO了,这是 网线的数据传输,但是数据 传输到 网线口 -> 内存,所以 网络IO中 io 通道 和 网络通道 都存在,但要区分开
IO 通道 是 IO的前提,不能算在 IO操作中,而且 执行 阻塞IO指令,os才会把 线程 变成 阻塞态,不能争抢cpu资源,即阻塞IO 和 非 阻塞IO 和IO通道没有关系,而是跟 其IO指令有关系
关于IO占用系统资源的,系统的资源释放与否,只与 IO通道是否关闭有关系,与 IO指令是否执行完毕没有任何关系
6.区分 IO通道,和网络通道的区别
6.IO通道的数据单方向流动性:即 开启的 IO通道,只能 由(内存/ 建立IO通道的系统资源) 到 (建立IO通道的系统资源 / 内存),即一个通道 数据只能由 一端 流向 另一端,是单向的
7.IO通道的个数:由IO通道的数据单方向流动性可知,只有 有 多方向流动的 IO(例如 网络通信),就会建立,2个及以上 的 IO通道,并且一个通道一个网络接口
8.IO的分类(有多种分类方式)
1. 按 IO通道的个数分:
1. 单通道
2. 2或多通道
2. 按 同步,异步分
1. 同步IO
2. 异步IO
3. 按 阻塞 和 非阻塞
1. 阻塞IO
2. 非阻塞IO
4. 按IO通道 连接的 共享资源是否是 网线接口分
1. 网络IO
2. 非网络IO
5. 按 IO操作 有没有用户参与 分
1. 用户IO (鼠标,键盘)
2. 非用户IO
9.IO操作 未结束前,即IO通道 未关闭前,系统共享资源不会释放
10.IO通道关闭,与其对应的 系统资源就会释放,不用单独释放系统资源,跟线程的io操作无关,反正IO通道开启,系统资源获得,IO通道关闭系统资源释放
11.网络IO 必定有 2条IO通道,而且一定有 一个发送端,和一个接受端,同时发送端也同时作为接收端,接收端同时作为发送端,系统资源都是 网线接口
12.对于网线系统资源,它不不是一个,不要 混淆概念,对于文件磁盘,鼠标这些系统共享资源是单一的就是一个,一个线程占用了,其他线程就不能拥有,而网路接口是很多接口的,只是线程占用的那个接口,IO通道不释放是不会释放那个接口的
13.网络IO 有 2条 IO通道,并且 2条IO通道,各自连着一个网线接口资源,关闭一个IO通道,只会释放一个 网络接口
14.一个 IO通道,只能获得一个 系统资源,例如网络IO通道有2个就有2个网线接口资源