快收藏,Linux架构师必须知道的I/O知识!
Posted 散打Code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快收藏,Linux架构师必须知道的I/O知识!相关的知识,希望对你有一定的参考价值。
今天小羊跟小伙伴们分享I/O的概念。这个概念对咱们理解系统性能,调度系统资源有着重要的作用。深入理解I/O概念是每一个Linux开发者的必备功课。
I/O是输入和输出的意思。它广泛的存在于计算机体系中,比如键盘输入,屏幕输出,内存将代码加载到CPU中运行,CPU将数据保存到硬盘中以及网络中的资源传输和接收。这些都是输入输出,需要占用了相应的计算机I/O接口资源。
1. 阻塞I/O
这是最普遍的I/O状态,通常我们不定义I/O的状态时,系统默认(标准输入输出)的就是阻塞的I/O。阻塞I/O是指当前进程需要I/O的资源却发现该I/O的资源正在被其他的进程使用时或者等待的I/O信息还未到达时,该进程会一直等待I/O的使用权和资源的到来。阻塞I/O的进程一定会运行完成,但是阻塞的状态会浪费CPU的资源。因为每当CPU的资源轮换到该进程使用时,该进程总是不动作(因为I/O资源还没到)。
2. 非阻塞I/O
非阻塞I/O正好与I/O相对,拥有非阻塞I/O的状态的进程当需要的I/O正在被占用时,就不会一直等待中。而是直接返回相应状态(比如报错)之后直接退出。非阻塞的I/O不会浪费CPU调度的资源,但是它很没有“耐心”,进程常常得不到我们想要的结果。
3. I/O多路复用
上面的内容小伙伴们也看到了阻塞I/O和非阻塞I/O各有各的弊端。那我们可不可以有这样一个机制,当该进程的I/O资源没到时,CPU把该进程挂起。并且由另一个程序(进程)来“监视”着,当I/O的资源到了的时候,CPU就把该进程列为就绪态,开始分配给该进程CPU资源运行。这样,既可以在I/O资源没到的没有到的时候不无效的占用CPU,又可以在I/O资源到了的时候运行,给予我们想要的结果呢?当然可以,这就是I/O多路复用技术!
4. 同步I/O
同步I/O的概念是我们针对用户和操作系统内核来说的。我们用户都是在和内核打交道,当我们需要向硬盘上写文件时,我们向内核提交申请。内核接到申请并通过之后,并不一定将文件立刻写到硬盘中,所以我们需要动用某一个系统接口,“监督”内核立即写到硬盘中去。这样的好处是文件数据不会损失。缺点也是很明显的,就是效率会降低,因为硬盘的运行速度相对于CPU来说是很慢的,不断地在硬盘上写数据会大大的降低CPU效率。
5. 异步I/O
异步I/O是指直接把数据交给系统内核之后,就不在过问了。内核会在数据存储(内核也会有一个存储库,被称为cache)达到一定的数量后一次性的写入到硬盘中。这样就大大的提升了CPU的效率。缺点也很明显:在极端情况下(比如数据还在内核时计算机突然断电了)不能保证数据的完好无损。
大家好,我是小羊,这里分享了一些代码开发的知识和趣闻,欢迎大家在留言小程序中讨论留言,当然觉得好也可以点个赞再走哈!
欢迎大家扫描下方的二维码添加小羊微信与小羊讨论交流~
以上是关于快收藏,Linux架构师必须知道的I/O知识!的主要内容,如果未能解决你的问题,请参考以下文章
送书啦搬砖工逆袭Java架构师 8Elasticsearch详解(建议收藏)