首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果不使用零拷贝技术,普通的IO操作在OS层面是如何执行的

提前说明有些操作系统的相关概念自行百度,但是个人认为,很多面试官可能对于操作系统也懂的不多,当然不排除一些真正的大佬,往往面试的面试官也就那样,废话不多说,开始讲解普通IO的底层原理 早期的数据IO,由用户进程向...CPU发起,应用程序与磁盘之间的 I/O 操作都是通过 CPU 的中断完成的,如下图 用户发起读取数据请求到CPU....CPU把请求转发到磁盘控制器中 磁盘控制器读取数据到磁盘缓冲区 磁盘寄存器发送中断信号给cpu CPU读取磁盘缓冲区的数据到寄存器中 CPU再把寄存器中的数据读取到内存中 最后用户进程再把内存的数据读取...CPU已经读取完了 CPU此时再把内核缓冲区拷贝到用户缓冲区中 最后系统调用返回 传统的IO底层原理 比如我们正常从磁盘中读取一张图片,返回给前端,首先会调用read进行读取,然后在write进行输出...,整体流程如下 用户进程调用read进行第一次用户态到内核态的切换 磁盘收到请求,DMA会把磁盘缓冲区的数据拷贝到内存缓冲区完成第一次拷贝DMA拷贝 然后进行第二次内核态用户态的转换 把内核缓冲区的数据

17340

如果不使用零拷贝技术,普通的IO操作在OS层面是如何执行的(二)

零拷贝常用技术 上一次我们说了传统的IO操作是如何是实现的,最后引出了零拷贝技术,这次我们看看有那些零开拷贝技术....(如果不使用零拷贝技术,普通的IO操作在OS层面是如何执行的) mmap+write sendfile+DMA gather copy splice mmap+write零拷贝技术 mmap+write...拷贝技术替换了传统的read+write技术,减少了一次CPU拷贝,mmap实际上Linux提供的一种内存映射技术,他把用户进程的一段虚拟地址映射到磁盘文件的地址....这样 DMA 引擎直接利用 gather 操作将页缓存中数据打包发送到网络中即可,本质就是和虚拟内存映射的思路类似。...,减少两者之间的CPU拷贝 上图表示,整体上经历了两次切换,和两次DMA拷贝,0次cpu拷贝 我们常用的组件kafka就是用的sendfile+DMA gather copy技术,而我们的RocketMq

21940
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java图形用户界面设计AWT事件处理

    前面的文章介绍了如何放置各种组件,从而得到了丰富多彩的图形界面,但这些界面还不能响应用户的任何操作。比如单击前面所有窗口右上角的“X”按钮,但窗口依然不会关闭。...因为在 AWT 编程中 ,所有用户的操作,都必须都需要经过一套事件处理机制来完成,而 Frame 和组件本身并没有事件处理能力 。...一、GUI事件处理机制 定义 当在某个组件上发生某些操作的时候,会自动的触发一段代码的执行。...在GUI事件处理机制中涉及到4个重要的概念需要理解: 事件源(Event Source):操作发生的场所,通常指某个组件,例如按钮、窗口等; 事件(Event):在事件源上发生的操作可以叫做事件,GUI...AWT 中提供了丰富的事件类,用于封装不同组件上所发生的特定操作, AWT 的事件类都是 AWTEvent 类的子类 , AWTEvent是 EventObject 的子类。

    17110

    事件

    addFocusListener(FocusListener); 焦点: 焦点就是你鼠标移动到的位置,你鼠标在某一处则某一处获得焦点,鼠标移开则失去焦点。...getSource();方法是用于得到一个事件对象,这个对象包含了一个事件的所有要素。...addKeyListener(KeyListener); 键盘事件: 可以响应键盘的长按、按下、弹起事件,里面的饿getKeyCode();方法可以捕捉键盘上每一个键的代码。...按着就是一次按下事件,然后松开就是一次松开事件,在鼠标箭头进入某个组件范围内时就是一次进入事件,同理将鼠标箭头移出组件范围外就是一次移出事件。   代码示例: ? ? 运行效果: ?...有趣的小实验: 可以在响应进入事件的方法里使用随机数来更改组件的坐标位置。这样鼠标碰到那个组件,那个组件就会马上跑开。 代码示例: ? 运行效果: ? ? ?

    93120

    Java-GUI编程之事件处理

    事件处理 前面介绍了如何放置各种组件,从而得到了丰富多彩的图形界面,但这些界面还不能响应用户的任何操作。比如单击前面所有窗口右上角的“X”按钮,但窗口依然不会关闭。...因为在 AWT 编程中 ,所有用户的操作,都必须都需要经过一套事件处理机制来完成,而 Frame 和组件本身并没有事件处理能力 。...GUI事件处理机制 定义: ​ 当在某个组件上发生某些操作的时候,会自动的触发一段代码的执行。...在GUI事件处理机制中涉及到4个重要的概念需要理解: 事件源(Event Source) :操作发生的场所,通常指某个组件,例如按钮、窗口等; 事件(Event):在事件源上发生的操作可以叫做事件,GUI...AWT 中提供了丰富的事件类,用于封装不同组件上所发生的特定操作, AWT 的事件类都是 AWTEvent 类的子类 , AWTEvent是 EventObject 的子类。

    1.4K20

    Java设计模式(一)适配器模式

    一天无意中在github上搜索,发现了在Java领域stars排名最多的一个项目:iluwatar/java-design-patterns 里面总结了许多在我们开发过程中会使用到的设计模式,以前虽然也学习过...因为我们知道,小程序可以很容易的去实现刷题的功能,公众号有阅读文章的功能,而只要实现公众号到小程序的转换即可。这个转换在设计模式中称为适配器。...而接口适配器就是实现接口的抽象类,这样我们只需要继承这个接口适配器就能操作我们需要使用的方法了。 对于接口适配器,我们可能都见过。...在java.awt.event包中有许多适配器,比如监控键盘事件的接口KeyListener public interface KeyListener extends EventListener {...中,如果我们要监听键盘按下事件,只需继承KeyAdapter抽象类,然后实现keyPressed方法即可。

    51820

    【Java AWT 图形界面编程】事件处理机制 ③ ( AWT 中常见的事件和事件监听器 | 低级事件 | 组件事件 | 窗口事件 | 鼠标事件 | 高级事件 | 动作事件 | 事件监听器 )

    文章目录 一、AWT 中常见的事件 1、低级事件 2、高级事件 二、AWT 中常见的事件监听器 一、AWT 中常见的事件 ---- AWT 中事件分为两大类 , 低级事件 和 高级事件 ; 低级事件...: 基于某个特定基本动作的事件 , 如 点击 , 拖动 , 获取焦点 , 失去焦点 等固定的简单操作 ; 高级事件 : 不基于某个特定事件 , 而是 根据 功能的具体含义 定义的事件 ; 1、低级事件..., 点击 时触发的事件 ; 绘制事件 : PaintEvent , 组件绘制时触发的事件 , 当调用 update paint 函数时 , 触发该事件 ; 2、高级事件 高级事件 : 组件的 某项功能...; 二、AWT 中常见的事件监听器 ---- 事件监听器 与 事件是一一对应的 , 只需要将事件的 Event 改成 Listener 即可 ; AWT 中常见的事件监听器 : 组件事件监听器 : ComponentListener...; 鼠标事件监听器 : MouseMotionListener , 监听 鼠标 按下 , 移动 , 抬起 , 点击 ; 键盘事件监听器 : KeyListener, 监听 键盘 按下 , 松开 , 点击

    1.9K20

    Java实现坦克大战1.0

    当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。...(2)事件监听者实际上就是一个类,该类实现了某个事件监听器接口比如前面我们案例中的MyPanle就是一个类,它实现了KeyListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理。...(3)事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现多个监听接口 (4)这些接口在java.awt.event包和javax.swing.event包中定义。...列出常用的事件监听器接口,查看jdk文档。 坦克动起来 现在我们学习java事件处理机制和java绘图技术,请试试看如何让你的坦克可以通过按键控制上右下左(wdsa表示)的移动。...如图所示分析: 因为敌人的坦克,是在MyPanel上所以我们的代码在MyPanel 因为敌人的坦克,后面有自己特殊的属性和方法,可以单开一个EnemyTank 敌人坦克数量多,可以放入到集合Vector

    75910

    事件溯源模式

    请注意,生成事件的应用程序代码从订阅到事件的系统中分离。 事件存储发布的事件的典型用途是在应用程序中的操作更改实体时保持实体的具体化视图以及用于与外部系统集成。...问题和注意事项 在决定如何实现此模式时,请考虑以下几点: 只有通过重播事件创建具体化视图或生成数据投影时,系统才可实现最终一致性。...更新实体以撤销更改的唯一方式是将补偿事件添加到事件存储。 如果持久化事件的格式(而不是数据)需要更改,也许在迁移期间,很难将存储中的现有事件和新版本结合。...多线程应用程序和应用程序的多个实例可能将事件存储在事件存储中。 事件存储中的事件一致性至关重要,影响特定实体的事件的顺序(实体更改发生的顺序会影响当前状态)同样至关重要。...需要记录发生的事件,并可重播事件以还原系统状态、回滚更改或保留历史记录和审核日志。 例如,任务涉及多个步骤时,可能需要执行操作来恢复更新,并重播某些步骤使数据重返一致的状态。

    1.5K40

    事件模型

    事件模型如何理解呢,举个例子,你老婆出门了,让你在家看孩子,难道你每过一分钟就去看一次孩子吗,对于计算机来说,我做一个按钮,难道就一直监听这个按钮使用没有吗,这样的话对于资源消耗太大了,所以最好的办法就是在孩子手上系个铃铛...,就会自动调用actionPerformed函数,参数是一个事件对象,这个对象中包装了很多关于事件的信息,比方说发生的时间,发生的情况等等 ?...MouseEvent  java中事件监听的接口名称都非常有规律,监听动作的叫ActionListener,监听鼠标的叫MouseListener,监听键盘的叫KeyListener  MouseLinsenter...,鼠标在Frame上点击一下就会在当前位置点出一个点,需要注意的是,repaint方法的执行过程可以理解为:update()->paint(),首先更新,然后画点,所以repaint方法在画图的时候必须加上...,在KeyEvent类中都有对应的虚拟数值,只要进行比对就行 ?

    52710

    委托事件模型

    事件机制: 在用户使用键盘、鼠标等设备进行操作时,实际上每一次的操作都是在发起一个事件。...当我们的鼠标点击到窗口上的按钮时,并不是鼠标的箭头真正点击到这个按钮了,而是鼠标发出了一个动作事件,然后这个事件先被传送到了操作系统的命令处理带,然后再传送到负责显示图形的图像数据层,事件到这里后图像数据层会先看哪个程序的窗口在最上面...确认完毕后,图像数据层就会将这个动作事件提交给相对应的执行程序,执行程序里的代码先寻找是哪个位置的数据哪个对象提供的,进行一系列的搜索,找到后这个对象就会执行相对应的代码,然后再将执行后的显示传送到图像数据中心进行显示...之所以平时使用的时候没感觉出来,是因为这一系列的复杂的机制都是在瞬间完成的,只有在电脑卡顿的情况下才能感觉到点击后要等一段时间才会做出相应的响应。 流程图: ?...常用的方法: addFocusListener(FocusListener f); 焦点 addKeyListener(KeyListener k);  键盘 addMouseListener(MouseListener

    90120

    Java并发编程学习5-对象的组合

    设计线程安全的类我们考虑一下该如何设计一个线程安全的类?首先,能想到的就是要确保对象中所有的状态变量都是在可控范围内的。...如果在一个不变性条件中包含多个变量,那么在执行任何访问相关变量的操作时,都必须持有保护这些变量的锁。1.2 依赖状态的操作前面提到,类的不变性条件与后验条件约束了在对象上有哪些状态和状态转换是有效的。...它为每种类型的事件都备有一个已注册监听器列表,因此但某个事件发生时,就会调用响应的监听器。...在鼠标事件监听器与键盘事件监听器之间不存在任何关联,二者彼此独立,因此 VisualComponent 可以将线程安全性委托给这两个线程安全的监听器列表。...setLower 和 setUpper 都是“先检查后执行”的操作,但他们没有使用足够的加锁机制来保证这些操作的原子性。

    16321

    Flink优化器与源码解析系列--Flink相关基本概念

    Event 事件 事件是有关由应用程序建模的域的状态更改的声明。事件可以是流或批处理应用程序的输入和/或输出。事件是特殊类型的记录。...Instance 实例 术语实例用于描述特定类型的(通常的特定实例 操作或功能在运行期间)。...操作符执行某种操作,通常由Function执行。Sources 和 Sinks是用于数据摄取和数据出口的特殊操作符Operators。...Physical Graph 物理图 物理图是转换逻辑图以在分布式运行时中执行的结果。节点是任务,边缘指示数据流或数据集的输入/输出关系或分区。...转换可能会更改每个记录的数据流或数据集,但也可能仅更改其分区或执行聚合。尽管操作符或算子Operators和函数Functions是Flink API的“物理”部分,但转换只是API概念。

    82420

    有效使用 Node.js 事件循环

    如果该操作是异步的(例如,调用数据库或 REST 接口),Node 引擎会要求操作系统在准备好处理调用时通知它(比如在数据从数据库或 REST 调用传来时)。...在此期间,Node 事件循环会前进到需要执行的下一个操作。 您需要了解,Node 引擎会立即处理每个操作。在一些情况下,“立即” 意味着要求操作系统在某个操作准备好处理时获知此事。...它设置了一个超时,因此 Node 会将该超时传递给操作系统。然后,Node 继续执行下一个操作。在本例中,下一个操作是对 console.log() 的一次简单调用。...3 次调用是按特定顺序进行的。...使用 Node 库来访问数据库和文件等对象时,了解如何处理异步方法 — 和如何确保代码按一定的顺序执行 — 是至关重要的技能。

    1.6K20

    SAP S4HANA Cloud 2302 财务模块亮点

    价值体现 借助 ETO 解决方案,您可以: 查看项目的基于事件的生产成本过账(成本包括间接费用、差异、在制品等) 执行基于事件的收入确认 运行利润分析以分析项目获利能力 功能 在项目及其后续流程(如销售...通常,过账期间对应于月份。它们构成了日记账分录过账的基础。除常规过账期间外,还可以使用特殊期间,即细分关账操作的最后一个常规过账期间的特殊过账期间。...到目前为止,您可以在会计核算中拥有一个最多包含 12 个过账期间的会计年度,如果需要,还可以有 4 个特殊期间。 如果贵公司在特定行业(如零售)运营,则可能需要会计年度超过 12 个过账期间。...您可以使用此应用创建自己的规则: 在验证规则中,您可以指定系统应如何检查用户为资产主记录输入的值。 在替代规则中,您可以指定系统填充或覆盖的前提条件(替换)资产主记录中的特定字段。...价值体现 集中的监控银行对账单 快速识别银行对账单问题 功能 您可以执行以下操作: 显示已选择根据过滤条件进行监控的银行账户清单。 查看日终银行对账单的不同状态。

    47130

    「微服务架构」微服务架构中的数据一致性

    要查找崩溃的事务并恢复操作或应用补偿,我们需要协调来自多个服务的数据。对账 是在金融领域工作的工程师所熟悉的技术。你有没有想过银行如何确保你的资金转移不会丢失,或者两个不同的银行之间如何汇款?...在会计中,对账是确保两组记录(通常是两个账户的余额)达成一致的过程。对帐用于确保离开帐户的资金与实际支出的资金相匹配。这是通过确保在特定会计期间结束时余额匹配来完成的。...如何在对帐期间确定哪些事务可能已失败以及哪些步骤失败?一种解决方案是检查每个事务的状态。在某些情况下,此功能不可用(想象一下发送电子邮件或生成其他类型消息的无状态邮件服务)。...使用Debezium和Kafka Connect更改数据捕获 但是,有时候不需要特定的框架。一些数据库提供了一种友好的方式来拖尾其操作日志,例如MongoDB Oplog。...只有在首先发生变化时才会捕获更改。 无需特定工具即可更改数据捕获 更改数据捕获的最大缺点是业务逻辑的分离。更改捕获过程很可能与更改逻辑本身分开存在于您的代码库中 - 这很不方便。

    1K20
    领券