cpu和io的关系

在说io的五中模型之前,先说说Io把文件从哪里移到了哪里

自己的理解:
根据工作或者遇到的业务.   文件不可能存在缓存或在内存中,因为缓存和内存不能永久性储存东西,

文件需要被永久性储存.因此文件都存在电脑的硬盘里,  或者存在云服务器的它们的硬盘里.

我们io文件, 

第一种情况:对文件的内容进行修改

就是先去硬盘读取文件, 然后把文件读取到内存,  再对文件的内容进行修改,然后再把文件存到硬盘

第二种情况:不对文件的内容进行修改

就是先去云服务器的硬盘读取文件, 然后把文件读取到云服务器的内存, 然后把云服务器的内存的文件上传到web服务器, 然后我们再从web服务器上下载文件到我们自己电脑的硬盘里.

第三种情况:不对文件的内容进行修改

就是先去自己电脑的硬盘读取文件, 然后把文件读取到自己电脑的内存, 然后把自己电脑的内存的文件上传到web服务器,然后我们再从web服务器上下载文件到我们自己电脑的硬盘里.

io的五种模型

说到I/O模型,都会牵扯到同步、异步、阻塞、非阻塞这几个词,以下讲解这几个词的概念。

阻塞和非阻塞

阻塞和非阻塞指的是执行一个操作时等操作结束再返回结果,还是马上返回结果。

阻塞(blocking):指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起(当前线程进入非可执行状态,在这个状态,CPU不会分配时间片,线程暂停运行)只有到到结果才进入活动状态;

阻塞例子:海底捞的服务器为你点菜,当你点完菜后,服务员把消息传到后厨,这时你就在餐桌上等待,直到厨师把汤锅和配菜都准备好以后送到你桌上,你才能开吃。在上菜的过程中你还不能离开,因为你离开了之后服务员上菜了却找不到你人,所以你就是能等待,这个时候你处于阻塞等待状态,就是前面说的,你是调用者,你被挂起了,进入了非可执行状态。

非阻塞(nonblocking):指I/O操作被调用后立即返回给用户一个状态值,无需等到I/O操作彻底完成,最终的调用结果返回之前,调用者不会被挂起;

非阻塞例子:海底捞的服务器为你点菜,当你点完菜后,服务员把消息传到后厨,过了三分钟,你跑到后厨问,我的锅底或者肥牛卷好了没有?后厨说没好,然后你去处理其它事情,然后又过了五分钟,你又跑到后厨问,我的某个菜好了没有,如果没有,你还是继续做其他事情,然后等会再问一次,这个时候就是在I/O操作的同时,你没有被挂起,可以操作其他事情,但是如果I/O操作完成,你需要立马接受。

明天再学吧!!!!!!,这个有点多 哭哭哭

这是一个很好的关于并发/并行系统的问题。简单回答就是:IO所需要的CPU资源非常少。大部分工作是分派给DMA完成的。

对于磁盘IO,真实发生的场景可能是这样的:

CPU说:硬盘兄帮我把我要看的小电影拷贝一份到主存,谢谢,亲。
硬盘说:好的!我考完了叫你。
CPU说:么么哒!那我打游戏去啦!
...
CPU打撸啊撸 (100纳秒过去了)
...
硬盘说:小C我考完了。
CPU说:苍老师我来啦!

当然我们也可以到网上下载苍老师的作品,这就是网络IO。但情况基本是一样的,CPU童鞋在等小电影的过程中,打了一局撸啊撸。

所以,正因为这样派发任务,通讯,等待的过程,并发系统才彰显出它的意义。当然实际过程可能比这个复杂一万倍。比如CPU是不会直接和硬盘对话的,他们之间有个中间人,叫DMA(Direct Memory Access)芯片.

CPU计算文件地址 ⇒ 委派DMA读取文件 ⇒ DMA接管总线 ⇒ CPU的A进程阻塞,挂起 ⇒ CPU切换到B进程 ⇒ DMA读完文件后通知CPU(一个中断异常) ⇒ CPU切换回A进程操作文件

这个过程,对应下图(图源:《UNIX网络编程》),看到application这一列时间线了吗?aio_read操作之后,都是空白,CPU就不管了,可以做其他事去了。

假设原先读取文件CPU需要傻等50纳秒。现在尽管两次上下文切换要各消耗5纳秒。CPU还是赚了40纳秒时间片。

上面讲的是传统5大IO模型中的“异步IO”的大致过程。

---------------------------------------------------------------------------------------------------------------------

此文来源于下面的链接.

I/O会一直占用CPU吗? - 胖君的回答 - 知乎 https://www.zhihu.com/question/27734728/answer/127095338

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/76420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值

数据预处理 💫数据预处理的重要性💫处理缺失值⭐️识别表格中的数据⭐️计算每列缺失值的数量⭐️删除含有缺失值的样本或特征⭐️填充缺失值 💫处理异常值⭐️异常值的鉴别⭐️异常值的处理 💫将数据集划分为训练数据集和测试数据…

易服客工作室:PressMart – 现代Elementor WooCommerce WordPress商城主题

PressMart是现代且独特的 Elementor WooCommerce WordPress商城主题。它配备了高品质的 05 预建主页,适合任何在线商店,如时装店、电子产品商店、家具店等。 我们使用 Elementor – 一个拖放页面构建器,不需要用户的编码技能即可轻松编辑和构…

【Python】使用python解析普通格式的报文为someip格式报文

文章目录 1.安装scapy库2.示例 1.安装scapy库 使用 pip 安装 scapy 第三方库,打开 cmd,输入以下命令: pip install scapy出现如图所示,表示安装成功: 2.示例 要解析someip格式报文,需要导入someip模块&a…

Qt扫盲-Qt Model/View 理论总结 [上篇]

Qt Model/View 理论总结 [上篇] 一、概述1.model / view 架构2. Model3. View4. Delegate5. 排序6. 快捷类 二、使用model/view1. Qt包含两种 model2. 在现有 model 中使用 view 三、Model 类1. 基本概念1.model 索引2. 行和列2. item 的父 item3. Item roles4. 总结 2. 使用mo…

flutter 初识(开发体验,优缺点)

前言 最近有个跨平台桌面应用的需求,需要支持 windows/linux/mac 系统,要做个更新应用的小界面,主要功能就是下载更新文件并在本地进行替换,很简单的小功能。 花了几分钟构建没做 UI 优化的示例界面: 由于我们的客…

深入理解Vue 3.0x中的Suspense和异步组件

深入理解Vue 3.0x中的Suspense和异步组件 Vue 3.0x作为Vue.js框架的最新版本,引入了许多创新特性,其中Suspense和异步组件是重要的改进之一。在本文中,我们将深入探讨这两个特性,了解它们如何为现代Web应用带来更好的性能和用户体…

简单易懂的 Postman Runner 参数自增教程

目录 什么是 Postman Runner? Postman Runner 如何实现参数自增? 步骤一:设置全局参数 步骤二:将全局参数带入请求参数 步骤三:实现参数自增 资料获取方法 什么是 Postman Runner? Postman Runner 是…

【Apollo】推动创新:探索阿波罗自动驾驶的进步(含安装 Apollo的详细教程)

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

python selenium如何保存网站的cookie用于下次自动登录

## 一、python selenium如何保存网站的cookie 使用Selenium保存网站的Cookie非常简单。下面是一个示例,展示了如何使用Selenium打开网站,然后保存获取到的Cookie: from selenium import webdriver# 初始化浏览器 browser webdriver.Chrome…

Mysql复制类型、主从复制集群种类、主从复制原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 主从复制原理主从复制原理图一、概述二、为什么要读写分离?三、mysql支持的复制类型1、基于语句的复制statement:2、基于行的复制row&#x…

JavaFx基础学习【五】:FXML布局文件使用

目录 前言 一、介绍 二、简单体验 三、FXML标签元素 四、fx属性介绍 五、重写initialize(名字需要保持一致)方法 六、Scene Builder快速布局 前言 如果你还没有看过前面的文章,可以通过以下链接快速前往学习: JavaFx基础学…

【Spring】深入理解 Spring 事务及其传播机制

文章目录 一、Spring 事务是什么二、Spring 中事务的实现方法2.1 Spring 编程式事务(手动)2.1.1 编程式事务的使用演示2.1.2 编程式事务存在的问题 2.2 Spring 声明式事务(自动)2.2.1 Transactional 作用范围2.2.2 Transactional …

论文解读 | 如何进行精确的对象检测和语义分割?谷歌研究员提出丰富的特征层次结构!

原创 | 文 BFT机器人 01 摘要 本文关注经典的PASCAL VOC数据集上的对象检测性能问题,近年来性能趋于稳定。作者提出一种简单且可扩展的检测算法,相较于之前最佳结果,在VOC 2012数据集上将平均精度(mAP)提高了30%以上,达到了53.3%…

React构建的JS优化思路

背景 之前个人博客搭建时,发现页面加载要5s才能完成并显示 问题 React生成的JS有1.4M,对于个人博客服务器的带宽来说,压力较大,因此耗费了5S的时间 优化思路 解决React生成的JS大小,因为我用的是react-router-dom…

虚拟机怎么连接加密狗?USB Sever连接方法

公司想把软件都迁移到虚拟机,但是没法连接加密狗,怎么办? 让USB Sever来连接就行了! 第一步, 根据加密狗的数量, 选一台合适的朝天椒USB Sever, 第二步, 将加密狗全部插在朝天椒U…

【AI绘画】3分钟学会ikun幻术图

目录 前言一、效果展示二、准备工作三、操作步骤3.1平台创建实例3.2 启动SD 四、安装QR Code Monster 模型五、成图 前言 大家热爱的ikun幻术在今天的分享中将呈现。在本文中,我们将揭示一个备受欢迎的图像幻术技术,让您感受到令人惊叹的视觉创造力。 …

BBS项目day03、首页(前端文章布局、分类布局、标签布局)、个人站点(前后端实现)

一、首页 路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注册path(register/, views.reg…

数据分析两件套ClickHouse+Metabase(二)

Metabase篇 Metabase安装部署 任何问题请查看 -> 官方文档 jar包从GitHub下载 -> 地址 同样有个问题, 默认数据源里没有ClickHouse, 不过ClickHouse官方提供了插件包 -> 插件包 在安装metabase目录下新建一个plugins文件夹, 把下载的clickhouse.metabase-driver.ja…

安卓:网络框架okhttp

目录 一、okhttp介绍 1. OkHttpClient类: 常用方法: 2. Request类: 常用方法: 3. Response类: 常用方法: 4. Call类: 常用方法: 5. Interceptor接口: 常用方法&…

Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

相关API的使用: 1 traverse (模型循环遍历方法) 2. THREE.TextureLoader(用于加载和处理图片纹理) 3. THREE.MeshLambertMaterial(用于创建材质) 4. getObjectByProperty(通过材…