当前位置: 首页 > news >正文

数据一致性问题剖析与实践(二)——单机事务的一致性问题

一、前言

我们一般讲到单机事务,离不开的就是数据库,其最重要的定义就是,要么全部成功执行,要么全部不执行,保证安全的状态转化。

之前我们讨论了几种场景的一致性问题

  • 冗余数据存储中的一致性问题
  • 分布式共识中的一致性问题

本文将围绕单机事务中的一致性问题展开讨论。

二、事务是什么?

2.1 本质

数据库事务的本质是一组数据库操作的集合,这些操作要么全部成功执行,要么全部不执行,以保证数据库从一个一致性状态转换到另一个一致性状态

事务这个概念在业务逻辑中非常常见,有非常多的实际场景需要。

2.2 事务特性 ——ACID

单机事务的 ACID 特性,是保障数据正确性与一致性的基础准则

  • 原子性(Atomicity):事务被视为一个不可分割的整体,所有操作要么全部成功提交,要么全部失败回滚。例如在银行转账中,从账户 A 扣款与向账户 B 入账必须同时完成,若扣款成功但入账失败,整个事务需回滚,确保资金不会凭空消失或增加 。

  • 隔离性(Isolation):多个并发事务之间相互隔离,互不干扰。不同隔离级别(读未提交、读已提交、可重复读、串行化)定义了事务间对数据访问的可见范围,避免脏读、不可重复读和幻读等问题 。

    其本质是控制数据的访问范围,在并发场景下,实现不同隔离级别下的“对外一致性”

  • 持久性(Durability):一旦事务提交成功,其对数据的修改将永久保存,即使系统出现故障(如断电、宕机)也不会丢失。银行交易完成后,账户余额的变更会持久化存储,确保数据的可靠性 。

  • 一致性(Consistency):事务执行前后,数据需从一个合法状态转换到另一个合法状态。如电商下单时,库存数量必须与订单数量保持逻辑一致,不能出现超卖现象,以维持业务规则的正确性 。

只有保证了原子性、隔离性、持久性的前提下,才能实现一致性,一致性是事务的目的。

三、单机事务中的一致性问题

以mysql为例

3.1 隔离性

隔离性是确保不同事务之间相互隔离、互不干扰,在并发执行时,每个事务都能如同在单线程环境下一样独立地运行,不受其他事务的影响。

其本质是控制数据的访问范围,在并发场景下,实现不同隔离级别下的“对外一致性”

3.1.1 产生场景

  1. 脏读:当一个事务读取到另一个未提交事务修改的数据时,就会发生脏读。例如,事务 A 对某条数据进行了修改,但尚未提交,此时事务 B 读取了这条被修改但未提交的数据,若事务 A 随后回滚了修改,那么事务 B 读取到的数据就是无效的,这就是脏读现象。在银行系统中,如果一个转账事务正在处理(未提交),另一个查询事务读取了转账过程中的临时余额,就可能出现脏读问题。
事务 A 事务 B 数据 修改数据 读取未提交修改的数据 回滚修改 事务 B 读取到无效数据 alt [事务 A 回滚] 事务 A 事务 B 数据
  1. 不可重复读:在同一事务中,多次读取同一数据却得到不同的结果,原因是其他事务在此期间对该数据进行了修改并提交。比如,事务 A 先读取了某客户的账户余额,然后其他事务 B 对该账户进行了存款操作并提交,当事务 A 再次读取该账户余额时,得到的结果与第一次不同,这就产生了不可重复读的问题。
事务 A 事务 B 数据 第一次读取数据 修改数据并提交 第二次读取数据 两次读取结果不同 事务 A 事务 B 数据
  1. 幻读:在一个事务中执行查询操作时,由于其他事务插入或删除了符合查询条件的数据,导致该事务再次执行相同查询时得到了不同的结果集。例如,事务 A 查询某类商品的库存数量,然后事务 B 插入了一些该类商品的库存记录并提交,当事务 A 再次查询时,发现库存数量增加了,就好像出现了 “幻觉”,这就是幻读现象。

3.1.2 Mysql中的事务隔离级别

  • 读未提交(Read Uncommitted)级别最低,几乎不提供隔离保证,容易出现脏读、不可重复读和幻读;
  • 读已提交(Read Committed)可以避免脏读,但可能会出现不可重复读和幻读;
  • 可重复读(Repeatable Read)是 MySQL 的默认隔离级别,它可以避免脏读和不可重复读,但无法解决幻读;
  • 串行化(Serializable)是最高的隔离级别,它通过强制事务串行执行,完全避免了脏读、不可重复读和幻读,但会严重影响并发性能。
事务 A 事务 B 数据 第一次查询数据 插入或删除符合条件的数据并提交 第二次查询数据 两次查询结果集不同,出现幻读 事务 A 事务 B 数据

3.1.3 解决范式

  1. 读屏障:通过控制读取的逻辑(比如读版本快照、还是读现在的数据)来实现对外的一致性。
    MySQL 提供了不同的事务隔离级别来解决上述问题,其中最主要的机制就是MVCC(Multiversion Concurrency Control),本质是一种快照读,通过自增的事务id来判断读哪个版本的快照数据,并通过redo log “回溯”返回对应的数据快照。
  2. 使用锁机制控制并发:本质是细粒度维度(如数据行、数据范围)去串行化写操作,来保证数据写的正确性
    在mysql中,如共享锁(S 锁)、排他锁(X 锁)和间隙锁。
    • 共享锁允许其他事务读取数据,但阻止其他事务修改数据;
    • 排他锁则完全阻止其他事务对数据的读写操作。例如,当一个事务需要对数据进行修改时,可以先获取排他锁,确保在修改期间其他事务无法干扰,从而保证数据的一致性。
    • 间隙锁,间隙锁主要用于解决幻读问题,它锁住的不是具体的数据行,而是数据的范围。当一个事务使用间隙锁锁定了某个数据范围后,其他事务无法在该范围内插入新的数据,从而避免了幻读现象的发生。
事务 A 事务 B 事务 C 数据 获取共享锁 获取共享锁 请求排他锁 拒绝请求,等待 释放共享锁 释放共享锁 获取排他锁 alt [共享锁未释放] [共享锁释放] 事务 A 事务 B 事务 C 数据

3.2 原子性

要么一起成功,要么一起失败!

3.2.1 产生场景

  1. 系统崩溃:在事务执行过程中,如果系统突然崩溃(如硬件故障、操作系统崩溃等),可能导致事务中的部分操作已经执行,而部分操作未执行。例如,在一个数据库更新事务中,已经完成了对某些表的插入操作,但在执行更新另一些表的操作时系统崩溃,这就破坏了事务的原子性。
  2. 软件错误:应用程序中的错误(如代码逻辑错误、异常未处理等)可能导致事务无法完整执行。比如,在一个涉及多个数据库操作的事务中,由于代码中的一个逻辑错误,导致在执行某个操作时抛出异常,使得后续操作无法继续进行,从而破坏了事务的原子性。
  3. 资源不足:当事务执行需要的资源(如数据库连接、内存等)不足时,可能无法完成所有操作。例如,在一个批量插入数据的事务中,由于数据库连接池耗尽,导致部分数据插入成功,部分数据插入失败,破坏了事务的原子性。
  4. 业务主动回滚:在某些业务场景下,根据特定的业务规则或条件判断,即使事务尚未执行完毕,也需要主动进行回滚操作。例如,在电商系统的订单创建事务中,当系统检测到用户的账户余额不足支付订单金额时,即使订单创建过程中的部分操作(如生成订单号、记录订单基本信息)已经完成,也需要主动回滚整个事务,取消订单创建,以保证业务逻辑的正确性和数据的一致性。

3.2.2 解决范式

常规解法有两种思路——回滚&尽最大努力交付,但是在单机事务这个场景下,一般都采用回滚的思路。

  • 回滚机制

以 MySQL 为例,MySQL 中的 InnoDB 存储引擎通过事务日志(重做日志 redo log 和回滚日志 undo log)来实现事务的回滚。

  • 尽最大努力交付

3.3 持久性

3.3.1 背景

在单机情况下,持久化主要指内存和磁盘之间的同步策略,本质是性能和可靠性的权衡。

3.3.2 解决范式

核心思路就是把数据写入磁盘,但难点在于性能和可靠性之间的平衡,其中常见的解决策略就是lsm-tree(Log-Structured-Merge-Tree),通过将数据的变化转化为日志的变化,从而实现顺序写磁盘,提升磁盘写入性能。

在Mysql中,

  1. WAL(Write-Ahead Logging):InnoDB使用WAL来保证数据的持久性。所有修改操作首先写入到WAL日志中,然后才更新内存中的数据结构。
  2. Change Buffer:InnoDB使用Change Buffer来减少磁盘I/O。当有多个修改操作发生时,它们会先被记录在Change Buffer中,然后定期合并到SSTable中。
  3. Buffer Pool:InnoDB使用Buffer Pool来存储最近访问的数据页,从而减少磁盘I/O。

总结

单机事务中的一致性问题,通过原子性、隔离性和持久性这三大特性的协同保障得以实现。

原子性确保事务操作的完整性,避免部分成功部分失败的情况;

隔离性控制并发事务之间的相互影响,通过不同的隔离级别和并发控制手段,实现数据访问的一致性;

持久性则致力于将事务提交的数据可靠地存储到磁盘,在性能和可靠性之间寻求平衡。

以 MySQL 为代表的单机数据库系统,通过 MVCC、各种锁机制、事务日志、WAL、Change Buffer 和 Buffer Pool 等一系列技术手段,有效地解决了单机事务中的一致性问题,为各类应用提供了稳定、可靠的数据处理基础。

相关文章:

数据一致性问题剖析与实践(二)——单机事务的一致性问题

一、前言 我们一般讲到单机事务,离不开的就是数据库,其最重要的定义就是,要么全部成功执行,要么全部不执行,保证安全的状态转化。 之前我们讨论了几种场景的一致性问题 冗余数据存储中的一致性问题分布式共识中的一…...

VUE Element-ui Message 消息提示组件自定义封装

为了让message 信息提示的更加方便快捷,减少不同地方的调用,避免代码的重复,特意再官方message 组件的基础上二次封装,使代码更加的优雅和高效。 实现效果: 代码组件: 封装成 message.js 文件,…...

HSTL详解

一、HSTL的基本定义 HSTL(High-Speed Transceiver Logic) 是一种针对高速数字电路设计的差分信号接口标准,主要用于高带宽、低功耗场景(如FPGA、ASIC、高速存储器接口)。其核心特性包括: 差分信号传输&…...

【PCB工艺】运放电路中的负反馈机制

通过运算方法器电路设计详细解释负反馈机制(Negative Feedback) 负反馈 是控制系统、电子电路、神经系统等多个领域中非常核心的概念。特别在运算放大器(Op-Amp)电路中,负反馈是实现精确控制和高稳定性的关键机制。 …...

玩转Docker | 使用Docker部署Neko自托管浏览器

玩转Docker | 使用Docker部署Neko自托管浏览器 前言一、Neko介绍简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Neko服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问Neko服务访问Neko首页登录Neko五、基本使用设置键…...

聊聊自动化用例的维护

自动化测试中的农药悖论:为何长期维护至关重要 自动化测试常被视为"一次编写,永久有效"的解决方案,但随着时间的推移,即使设计最精良的测试套件也会逐渐失效。这种现象被称为农药悖论(Pesticide Paradox&am…...

OpenCV 图形API(60)颜色空间转换-----将图像从 YUV 色彩空间转换为 RGB 色彩空间函数YUV2RGB()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 YUV 色彩空间转换为 RGB。 该函数将输入图像从 YUV 色彩空间转换为 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图像必须是 8…...

Docker配置带证书的远程访问监听

一、生成证书和密钥 1、准备证书目录和生成CA证书 # 创建证书目录 mkdir -p /etc/docker/tls cd /etc/docker/tls # 生成CA密钥和证书 openssl req -x509 -newkey rsa:4096 -keyout ca-key.pem \ -out ca-cert.pem -days 365 -nodes -subj "/CNDocker CA" 2、为…...

监督学习(Supervised Learning)与无监督学习(Unsupervised Learning)​

监督学习与无监督学习是机器学习的两大核心范式,主要区别在于数据是否包含明确的“标签”(目标输出)。 ​​1. 监督学习(Supervised Learning)​​ ​​定义​​: ​​数据形式​​:输入数据&…...

批量将多个 Excel 表格中的某张图片替换为新的图片

对于 Excel 文档,相信大家都不陌生,我们可以在 Excel 单元格中插入各种各样的图片,我们也可以将 Excel 表格中的图片替换为新的图片,常规的做法我们都是通过 Office 来进行单个处理的,但是如果我们遇到批量处理的场景&…...

数据一致性问题剖析与实践(三)——分布式事务的一致性问题

一、前言 之前我们讨论了几种场景的一致性问题 冗余数据存储中的一致性问题分布式共识中的一致性问题单机事务中的一致性问题 本文将围绕分布式事务中的一致性问题展开讨论。 二、分布式环境的最大难题 相对于单机环境,分布式环境中,一致性问题最大…...

分布式理论和事务

微服务和分布式 微服务 是一种软件架构风格,它将应用程序拆分成一系列小型、独立的服务,每个服务专注于单一功能,彼此通过轻量级通信机制(如 API)进行交互。微服务通常是松耦合的,可以独立开发、部署和扩展…...

基于Flask与Ngrok实现Pycharm本地项目公网访问:从零部署

目录 概要 1. 环境与前置条件 2. 安装与配置 Flask 2.1 创建虚拟环境 2.2 安装 Flask 3. 安装与配置 Ngrok 3.1 下载 Ngrok 3.2 注册并获取 Authtoken 4. 在 PyCharm 中创建 Flask 项目 5. 运行本地 Flask 服务 6. 启动 Ngrok 隧道并获取公网地址 7. 完整示例代码汇…...

flutter和vue3项目利用webview_flutter插件通信

近来需要实现一个功能: flutter项目的会员中心页面跳转到vue3项目的活动页,点击该活动页面的“签到”按钮后到flutter项目的积分中心页面进行签到,签到成功后手动返回上一个页面即vue3活动页面的按钮状态更新问题(需更新为“已签到”)。 实现方法:通过webview_flutter …...

sql 根据时间范围获取每日,每月,年月的模版数据

1:获取每日模版数据(参数也支持跨年) SELECT a.selected_date cdate FROM(SELECT adddate(1970-01-01,t4.i * 10000 t3.i * 1000 t2.i * 100 t1.i * 10 t0.i) selected_dateFROM( SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELEC…...

亚信安全与联通数科达成战略合作,成立联信事业部

4月22日,亚信安全与联通数字科技有限公司(以下简称“联通数科”)正式签署战略合作协议,双方宣布将联合成立“联信事业部”,仪式上,联通数科董事长孙江山与亚信安全董事长何政为“联信事业部”成立揭牌&…...

第五节:进阶特性高频题-Teleport与Suspense组件应用

Teleport:解决模态框/弹窗的DOM层级问题(如挂载到body) Suspense:处理异步组件加载状态(fallback内容展示) 深入解析 Vue3 的 Teleport 与 Suspense 组件 一、Teleport 组件:突破 DOM 层级限制…...

如何使用 uv 构建 Python 包并本地安装

本文将逐步指导你创建一个简单的 Python 包,并将其本地安装到机器或云环境中。完成本教程后,你将拥有一个可复用的 Python 库,可直接通过 pip 安装或在项目中导入使用。 步骤详解 Step 0: 选择构建工具 - 使用 uv 推荐理由:uv 是…...

集结号海螺捕鱼组件搭建教程与源码结构详解(第一篇)

本系列将基于 C Unity3D Java MySQL 构建的集结号海螺捕鱼平台,全面拆解组件架构、服务部署、客户端接入、数据库结构等内容,适合技术团队二次开发及运维部署。 一、整体架构说明 集结号海螺捕鱼平台采用三层结构: 客户端(Uni…...

RabbitMQ复习笔记

文章目录 MQ 概述同步调用拓展性差的问题性能下降的问题级联失败问题 异步调用举例 技术选型 RabbitMQRabbitMQ 安装RabbitMQ 收发消息交换机队列绑定关系模拟发送消息 RabbitMQ 数据隔离用户管理virtual host 授权 SpringAMOPSpringAMOP 快速入门消息发送消息接收 Work Queues…...

游戏开发核心技术解析——从引擎架构到攻防体系的完整技能树

游戏开发必备的7大技术体系,涵盖从Unity/Unreal引擎应用、C/C#编程范式到图形渲染管线构建等核心技术,特别剖析MMO游戏开发中的网络安全架构设计要点。通过2023年某头部游戏公司DDoS攻击事件,揭示实时防御策略与合规审计的关键作用。一、游戏…...

Execl 最佳字体和大小推荐[特殊字符]

文章目录 ✅ **通用推荐字体与字号**🔤 **字体说明**📊 场景推荐📁 办公文档(如财务报表、周报等)📈 数据可视表格📋 打印友好 🌐 多语言场景(中英文混排) ✅…...

JavaScript学习教程,从入门到精通,Ajax与Node.js Web服务器开发全面指南(24)

Ajax与Node.js Web服务器开发全面指南 一、初识Ajax 1.1 Ajax基本概念 语法知识点: Ajax (Asynchronous JavaScript and XML) 是一种无需重新加载整个网页的情况下,能够更新部分网页的技术核心对象:XMLHttpRequest工作原理: 创…...

VR 全景看车的独特优势​

全方位沉浸式体验​ VR 全景看车最显著的优势,就是为用户带来了全方位的沉浸式体验。通过 VR 技术,用户仿佛置身于真实的汽车展厅或试驾场景之中,能够 360 度无死角地观察车辆的外观、内饰、细节等各个方面 。无论是车辆的整体造型&#xff0…...

Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系

先说结论: ✅ 高阶函数既可以用 Lambda 表达式,也可以用函数引用! 在 Kotlin 中,高阶函数(Higher-Order Function)和 Lambda 表达式密切相关,但它们是两个不同的概念: ✅ 简单理解…...

SQL技术终极指南:从内核原理到超大规模应用

一、DDL核心应用场景与最佳实践 1.1 表结构设计场景矩阵 业务场景核心语法要素典型实现案例电商用户画像JSON字段虚拟列索引CREATE TABLE users (id INT, profile JSON, AS (profile->>$.age) VIRTUAL, INDEX idx_age((profile->>$.age)))物联网时序数据分区表压…...

Qt实现语言切换的完整方案

在Qt中实现语言动态切换需要以下几个关键步骤,我将提供一个完整的实现方案: 一、准备工作 在代码中使用tr()标记所有需要翻译的字符串 cpp button->setText(tr("Submit")); 创建翻译文件 在.pro文件中添加: qmake TRANSLATION…...

消息中间件RabbitMQ02:账号的注册、点对点推送信息

一、默认用户登录和账号注册 1.登录 安装好了RMQ之后,我们可以访问如下地址: RabbitMQ Management 输入默认的管理员密码,4.1.0的管理员账号和密码是: guest guest 2.添加账号 consumer consumer 添加成功后: 角色…...

php 支付宝官方 Alipay Easy SDK

使用 Alipay Easy SDK。 打造最好用的支付宝开放平台服务端SDK,Alipay Easy SDK让您享受极简编程体验,快速访问支付宝开放平台开放的各项核心能力。 要求: PHP版本 > 7.0安装PHP cURL扩展安装PHP OpenSSL扩展安装PHP fileinfo扩展 使用…...

深入理解 java synchronized 关键字

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...

即时角色:使用可扩展的扩散变换器框架个性化任何角色

Paper Title: InstantCharacter: Personalize Any Characters with a Scalable Diffusion Transformer Framework 论文发布于2025年4月16日 Abstract部分 U-Net架构的局限性:传统的基于U-Net架构的定制方法存在一些问题,如泛化能力不足和生成图像质量的损失。 U-Net模型需要…...

开源作业调度框架Quartz框架详细使用说明

Quartz框架详细使用说明 Quartz 是一个功能强大的开源作业调度框架,广泛用于在Java应用程序中执行定时任务。以下是Quartz框架的详细使用说明、完整代码示例、同类框架对比以及总结表格。 1. Quartz框架概述 特点: 灵活的调度:支持多种调度方…...

配置Spark历史服务器,轻松查看任务记录

在大数据处理中,Spark是一个强大的分布式计算框架。但当Spark服务重启后,之前的运行记录就会消失,给我们排查问题和分析任务执行情况带来不便。这时,配置Spark历史服务器就显得尤为重要,它能帮助我们保存和查看历史任务…...

身份证实名认证:通往数字安全与便捷生活的钥匙

在数字化日益深入我们生活的今天,信息安全和隐私保护成为了每个人关心的焦点。而身份证实名认证作为保障个人信息安全的重要环节,正扮演着越来越关键的角色。它不仅是连接现实世界与数字世界的桥梁,更是确保个人在线活动安全、可靠的基础。 什…...

0基础可以考MySQL OCP么?备考时间需要多久?

最近被问爆的 “0 基础能不能考 MySQL OCP”“备考要多久” 终于来答疑啦!作为过来人,负责任地说:0 基础完全能冲! 0 基础真的能考 MySQL OCP? 很多姐妹担心自己是数据库小白,连 SQL 都没摸过&#xff0c…...

node.js 实战——(概念以及Buffer 知识点学习)

概念 node.js是一个开源的、跨平台的javascript运行环境;它可以开发服务器应用,可以开发工具类应用(webpack、vite、Babel),也可以开发桌面端应用(vscode、Figma、Postman) #mermaid-svg-0TkAt8LEFhyrVrsw {font-fami…...

论文阅读 | 大模型工具调用控制的策略优化

文章目录 I. 背景II. 方法细节2.1 问题定义2.2 工具集成RL2.3 PPO2.4 GRPO2.5 OTC-PO2.5.1 OTC-PPO2.5.2 OTC-GRPO2.5.3 工具集成奖励设计 III. 实验 题目: OTC: Optimal Tool Calls via Reinforcement Learning 论文地址: OTC: Optimal Tool Calls via…...

【论文阅读】Dual-branch Cross-Patch Attention Learning for Group Affect Recognition

【论文阅读】Dual-branch Cross-Patch Attention Learning for Group Affect Recognition 摘要1.介绍2.相关工作3.双分支交叉Patch注意力Transformer4.实验5.局限性 摘要 本篇博客参考IEEE 2022年收录的论文Dual-branch Cross-Patch Attention Learning for Group Affect Reco…...

centos stream 10 修改 metric

1. 查看当前网络连接 nmcli connection show 2. 查看当前网络连接的metric ip route show 3. 修改指定连接的 metric sudo nmcli connection modify "Wired connection 1" ipv4.route-metric 100 ipv6.route-metric 100 值越大,优先级越低&#xff…...

Java从入门到“放弃”(精通)之旅——String类⑩

Java从入门到“放弃”(精通)之旅🚀——String类⑩ 前言 在Java编程中,String类是最常用也是最重要的类之一。无论是日常开发还是面试,对String类的深入理解都是必不可少的。 1. String类的重要性 在C语言中&#xf…...

MVCWebAPI使用FromBody接受对象的方法

近期在做软件升级操作的时候突然想着需要的参数比较多&#xff0c;如果需要参数的话参数比较多&#xff0c;所有想着使用frombody来集合数据统一操作做了个样张希望对您有帮助 代码如下&#xff1a; /// <summary>/// 入口当前文件接口下的操作数据/// </summary>/…...

知识储备-DC综合相关

DC flow相关 要点描述命令区别DC基础版&#xff0c;使用wireloadmodelcompile_ultraDCT 含DC所有非冲突feature(如wlm)&#xff0c;按照DC-prefloorplan-DCT流程获取布局信息更精确评估时序收敛 dc_shell -topoDCG含DCT所有feature&#xff0c;多了layer和congestion信息等 dc_…...

力扣-第645题《错误的集合》

一 . 问题描述 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 …...

gem5教程第六章 为ARM扩展gem5 这也是改进gem5的一个基础

本章假设您已经使用gem5构建了一个基本的x86系统,并创建了一个简单的配置脚本。 下载ARM二进制文件 让我们从下载一些ARM基准测试二进制文件开始。从gem5文件夹的根目录开始: mkdir -p cpu_tests/benchmarks/bin/arm cd cpu_tests/benchmarks/bin/arm wget dist.gem5.org/…...

事关数据安全,ARM被爆不可修复漏洞

日前&#xff0c;ARM架构再次被爆出重大安全漏洞&#xff0c;影响波及ARMv8.3架构及以前的所有CPU。该漏洞为硬件级且无法完全修复&#xff0c;如被利用可能造成严重数据泄露风险。 ARM硬件级安全漏洞 来自ARM开发者官网的一项安全更新证实&#xff0c;存在一种名为PACMAN的新型…...

Unity中使用Cinemachine插件创建自由视角相机(freelookCamera)来实现第三人称漫游

1.安装下载Cinemachine插件 2.创建自由相机freelookCamera Follow:为我们的人物 LookAt:相机始终看向的地方&#xff0c;可以新建空物体&#xff0c;放在人物头上&#xff0c; invert&#xff1a;是反向&#xff0c;就是时鼠标移动方向与相机旋转方向一致 在组件最下面的…...

Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战

目录 一、背景与需求‌二、 Web基础与HTTP协议核心解析‌2.1 HTTP协议&#xff1a;数据交互的基石‌2.2 为何爬虫需理解HTTP协议&#xff1f;‌ 三、 Python爬虫实战&#xff1a;Requests库核心用法‌3.1 安装与环境配置‌3.2 案例1&#xff1a;GET请求抓取豆瓣电影Top250‌3.3…...

php基础

文章目录 基本语法基本数据类型:运算符?? 空合并 定义变量字符串操作内置变量\$_SESSION:会话信息\$_GET:获取URL参数 内置函数功能工具类的&#xff0c;utils网络通信类的会话管理类的 基本语法 每一个statement后面以;结尾&#xff0c;与C/C和Java一样注释用//&#xff0c…...

蓝桥杯17. 机器人塔

机器人塔 原题目链接 题目描述 X 星球的机器人拉拉队有两种服装&#xff1a;A 和 B。 这次他们表演的是“搭机器人塔”&#xff0c;类似下图&#xff1a; AB BA B AA A B BB B B A BA B A B B A组塔规则&#xff1a; A 只能站在 AA 或 BB 的肩上&#xff1b;B 只能站在 AB…...

rpm包管理

1.介绍 rpm用于互联网下包的打包及安装工具,包含在某些Linux发布版中&#xff0c;它生成具有.RPM扩展名的文件.RPM是RedHat Package Manage (RedHat软件包管理公具)的编写 类似windows的setup.exe&#xff0c;这一文件格式名称虽然打上RedHat的标志,但理念是通用的. Linux的…...