目录
引用:
什么是IO
IO,英文全称是Input/Output,翻译过来就是 输入/输出。平时我们听得挺多,就是什么磁盘IO,网络IO。
计算机角度的IO
我们常说的输入输出,比较直观的意思就是 计算机的输入输出, 计算机就是主体。大家是否还记得,大学学 计算机组成原理的时候,有个 冯.诺依曼结构,它将计算机分成分为5个部分:运算器、控制器、存储器、输入设备、输出设备。
操作系统的IO
我们应用程序是跑在用户空间的,它不存在实质的IO过程,真正的IO是在 操作系统执行的。即应用程序的IO操作分为两种动作: IO调用和IO执行。IO调用是由进程(应用程序的运行态)发起,而IO执行是 操作系统内核的工作。此时所说的IO是应用程序对操作系统IO功能的一次触发,即IO调用。
IO过程
IO调用:应用程序向操作系统内核发起IO调用请求
IO执行:操作系统完成IO操作
•数据准备阶段:内核等待IO设备准备好数据。
•数据获取阶段:操作系统将IO设备获取的数据复制到内核缓冲区
•数据拷贝阶段:内核将数据拷贝到应用程序进程缓冲区。
IO完成:线程返回到应用层IO发起函数下一行继续。
阻塞IO
既然咱已经知道了啥是IO,IO其实就是程序在进行逻辑之前的数据获取和之后的数据输出都可以统称为IO。
那踏马的什么叫踏马的阻塞IO,翻译翻译,什么叫阻塞IO。
一句话概括,当程序发起IO调用,无论是IO设备未就绪、内核还未获取IO数据、内核还未将数据拷贝至缓冲区 其中任何一处不处于就绪,应用程序线程就一直阻塞等待,直到整个过程完成。直到数据从内核拷贝到应用层缓冲区,才返回成功提示,表示此次IO完成。我们称之为
可以看出该类型十分简单易用,但若是需要吞吐量以至高并发IO则此模型不适合。
非阻塞IO
如果IO设备、内核数据等IO过程中还缺乏就绪条件,可以先返回错误信息给用户进程,让它不需要等待,而是通过轮询的方式再来请求。这就是非阻塞IO。在等待IO完成的时间片中复用线程的执行时机以提高程序的使用率并和响应效率。
非阻塞IO模型。简称NIO, Non-Blocking IO。它相对于阻塞IO,虽然大幅提升了效率,但是它依然存在 性能问题,即 频繁的轮询,导致频繁的系统调用,同样会消耗大量的CPU资源。
因此在内核直到可完成IO之前的时间我们的线程都可以执行其它逻辑,合理的安排IO和逻辑处理可以最大化的利用系统资源,提升系统吞吐率。
IO过程
IO调用:应用程序向操作系统内核发起IO调用请求
IO执行:操作系统完成IO操作
•内核IO阶段:是否准备就绪,就绪则复制数据返回成功,未就绪则返回错误
IO返回:带着返回状态回到应用层。