Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
C++内存模型演进 C++11到C++20改进_创想鸟

C++内存模型演进 C++11到C++20改进

C++11内存模型的核心是通过std::atomic和std::memory_order定义多线程下内存操作的可见性与顺序性,建立happens-before关系以避免数据竞争,确保程序正确性和可移植性。

c++内存模型演进 c++11到c++20改进

C++内存模型自C++11引入以来,为多线程编程提供了正式且跨平台的语义基础,极大地解决了此前在不同编译器和硬件平台上并发行为不一致的问题。从C++11奠定基石,到C++14、C++17的逐步完善,再到C++20带来实质性改进,整个演进过程都在努力平衡性能、易用性和正确性,特别是对原子操作的精细控制和低延迟同步机制的探索。

解决方案

C++内存模型的核心在于定义了多线程环境下,内存访问操作的可见性和顺序性。在C++11中,标准引入了

std::atomic

类型和

std::memory_order

枚举,这套机制旨在让开发者能够明确地控制内存操作的可见性,从而避免数据竞争和未定义行为。

C++11的奠基石:

std::atomic

是实现无锁编程的基石,它保证了对单个原子变量的读写操作是不可分割的。而

std::memory_order

则定义了这些原子操作与程序中其他内存操作之间的排序约束。

memory_order_relaxed

: 最宽松的内存序,只保证操作本身的原子性,不提供任何跨线程的排序保证。编译器和硬件可以随意重排。

memory_order_consume

: 消费顺序,保证依赖于原子操作结果的后续操作不会被重排到原子操作之前。这个曾被寄予厚望,但实际使用和实现都非常复杂,导致其在C++20中被弃用。

memory_order_acquire

: 获得顺序,保证此操作及之后的所有操作不会被重排到此操作之前。通常用于读取操作,确保能“看到”所有在此操作之前由

release

操作写入的数据。

memory_order_release

: 释放顺序,保证此操作及之前的所有操作不会被重排到此操作之后。通常用于写入操作,确保在此操作之前的所有写入对其他线程的

acquire

操作可见。

memory_order_acq_rel

: 获得-释放顺序,用于读-改-写操作(如

fetch_add

),同时具备

acquire

release

的语义。

memory_order_seq_cst

: 顺序一致性,最强的内存序。它不仅保证操作本身的原子性,还保证所有

seq_cst

操作在所有线程中都以相同的全局顺序发生。这是最容易理解和使用的,但通常也是性能开销最大的。

C++11通过“happens-before”关系来形式化这些内存序,确保了在并发环境下,不同线程的操作能够以可预测的方式相互影响。我个人觉得,C++11的这套东西,虽然初看复杂,但确实是多线程编程迈向标准化的关键一步。

立即学习“C++免费学习笔记(深入)”;

C++14和C++17的完善:C++14对内存模型更多是语法层面的小修小补和澄清,并没有引入新的核心概念。而C++17则开始触及性能优化的一些细节。它引入了

std::hardware_destructive_interference_size

std::hardware_constructive_interference_size

,这两个常量让开发者可以更好地理解CPU缓存行对并发性能的影响,从而在数据结构布局时进行优化,避免伪共享(false sharing)。这虽然不是直接修改内存模型本身,但它体现了标准委员会对并发性能细节的关注,以及如何通过对内存物理布局的理解来提升程序效率。说实话,这玩意儿对于写高性能并发代码的人来说,简直是福音,能省下不少摸索的时间。

C++20的重大改进:C++20在内存模型方面带来了几项重要的更新,旨在简化使用、提升性能和提供更强大的低级同步原语:

弃用

memory_order_consume

: 这是个大动作。由于

consume

的复杂性和难以正确实现,以及在实际应用中其性能优势并不明显,标准委员会最终决定弃用它。这意味着开发者不再需要纠结于这个难以捉摸的内存序,通常用

acquire

来替代其功能。我记得当时社区里关于

consume

的讨论就没有停过,弃用它也算是顺应民意了。

std::atomic_ref

: 这是一个非常实用的新特性。它允许你对一个现有的非原子对象创建一个原子视图,从而在局部范围内对其进行原子操作,而无需将原始对象声明为

std::atomic

。这对于改造遗留代码或者在某些场景下需要临时原子性访问非常有用。

std::atomic::wait

std::atomic::notify

: 这是一组低级同步原语,允许线程在原子变量上等待或被唤醒。它们通常比使用

std::mutex

std::condition_variable

更轻量级,因为它们不涉及操作系统的调度器,可以直接在用户空间进行等待和唤醒。这对于实现高性能的无锁数据结构或自定义同步机制提供了强大的工具

std::atomic_flag

的改进: 保证其是无锁的,并且提供了

test_and_set

clear

操作。

总的来说,从C++11到C++20,C++内存模型的发展方向是:在保持强大功能的同时,努力简化复杂性(如弃用

consume

),并提供更细粒度、更高性能的同步工具(如

atomic_ref

wait/notify

)。

C++11内存模型的核心概念是什么?

C++11内存模型的核心在于构建一个清晰的框架,来描述多线程程序中内存操作的可见性和顺序性,从而确保程序的正确性和可移植性。它主要围绕以下几个关键概念展开:

首先是数据竞争(Data Race)。这是C++内存模型要解决的首要问题。当两个或更多线程并发访问同一个内存位置,并且至少有一个是写入操作,同时这些访问之间没有适当的同步时,就会发生数据竞争。数据竞争会导致未定义行为(Undefined Behavior),这意味着程序可能崩溃、产生错误结果,或者表现出任何不可预测的行为。C++内存模型的目标之一就是提供工具,让开发者能够避免或正确处理数据竞争。

接着是happens-before关系。这是内存模型中最抽象但也是最重要的概念。它定义了两个操作之间的偏序关系,如果操作A happens-before 操作B,那么操作A对内存的修改对操作B是可见的。happens-before关系有几种来源:

sequenced-before: 同一线程内的操作顺序,这是最基本的。synchronizes-with: 通过原子操作(特别是

release

acquire

)或互斥量(

std::mutex

)等同步原语建立的跨线程关系。inter-thread happens-before: 通过一系列

synchronizes-with

sequenced-before

关系传递形成的复合关系。

理解happens-before关系是理解内存模型如何保证可见性和顺序性的关键。它告诉我们,哪些操作的执行顺序是确定的,以及一个线程对内存的修改何时能被另一个线程看到。

然后是原子操作(Atomic Operations)

std::atomic

模板类是C++内存模型提供的主要工具,用于执行原子操作。原子操作是不可分割的,这意味着它们要么完全执行,要么完全不执行,不会被其他线程的操作中断。这解决了单个变量读写操作的原子性问题。但仅仅原子性还不够,还需要控制这些原子操作与其他内存操作之间的排序,这就引出了

std::memory_order

最后是内存顺序(Memory Order)

std::memory_order

枚举定义了原子操作的内存排序语义。它告诉编译器和处理器在执行原子操作时,可以进行多大程度的指令重排。从最严格的

memory_order_seq_cst

(顺序一致性)到最宽松的

memory_order_relaxed

(松散),不同的内存序提供了不同的性能和同步保证。选择合适的内存序是优化并发性能的关键,但也是最容易出错的地方。

这些概念共同构成了C++11内存模型的基础,为编写正确、高效且可移植的并发代码提供了理论和实践的工具。

C++17和C++20对内存模型带来了哪些关键性改进?

C++17和C++20在C++11内存模型的基础上,进行了针对性的增强和优化,主要集中在提升开发体验、提供更高效的低级同步原语以及修正早期设计中的不足。

C++17最值得一提的,是引入了

std::hardware_destructive_interference_size

std::hardware_constructive_interference_size

。这并非直接修改内存模型的核心语义,但它直接关联到并发编程的性能优化。这两个常量提供了关于CPU缓存行大小的信息,帮助开发者在设计并发数据结构时,避免“伪共享”(false sharing)问题。伪共享发生在不同线程访问不同变量,但这些变量恰好位于同一个缓存行中时,导致缓存行在不同CPU核心间频繁无效化和同步,严重影响性能。通过了解缓存行大小,开发者可以有意地填充(padding)数据结构,确保并发访问的变量位于不同的缓存行,从而提升性能。这对我来说,是标准在向底层硬件特性靠拢,让C++开发者能写出更“硬核”的代码。

而C++20则带来了更实质性的内存模型改进,其中最引人注目的是:

首先是弃用

std::memory_order_consume

。这是一个重大决策。

memory_order_consume

的本意是提供比

acquire

更弱但仍能保证依赖链可见性的内存序,以期获得更好的性能。然而,它的语义过于复杂,难以正确理解和实现,导致实际应用中开发者往往难以驾驭,并且编译器在实现上也面临挑战,实际性能提升也并不明显。因此,标准委员会决定将其弃用,建议开发者在需要类似语义时,直接使用

memory_order_acquire

,这无疑简化了内存模型的使用复杂性,减少了潜在的错误。

其次,

std::atomic_ref

的引入。这是一个非常实用的特性。过去,如果你想对一个非

std::atomic

类型的对象进行原子操作,你可能需要用

std::mutex

来保护,或者干脆把对象声明为

std::atomic

。但

std::atomic_ref

允许你在运行时,对任何可原子操作的类型(如

int

,

bool

, 指针等)创建一个原子视图。这意味着你可以对一个普通的

int

变量进行

fetch_add

操作,而不需要改变其原始类型。这对于集成遗留代码、或者在某些特定场景下需要临时原子性访问的场景,提供了极大的便利和灵活性。

再者,

std::atomic::wait

std::atomic::notify

方法的加入。这组方法为原子类型提供了低级的等待和通知机制,类似于Linux的futex(fast user-space mutexes)。它们允许一个线程在原子变量的值满足某个条件时进行等待,或者被另一个线程唤醒。与传统的

std::mutex

std::condition_variable

相比,

atomic::wait/notify

通常更轻量级,因为它们可以在用户空间完成,避免了昂贵的内核上下文切换,从而在某些高并发、低延迟的场景下提供更好的性能。这对于构建自定义的无锁数据结构或高效的同步原语来说,无疑是如虎添翼。

这些改进共同体现了C++标准委员会在内存模型演进上的思考:既要保证正确性,又要兼顾性能,同时还要尽可能地降低使用门槛。

如何选择合适的内存顺序(memory_order)以优化并发性能?

选择合适的

memory_order

是C++并发编程中既关键又容易出错的一环。它直接关系到程序的正确性、可移植性以及性能。我的经验是,永远从最简单的开始,然后按需优化。

1.

memory_order_seq_cst

(顺序一致性):这是最简单、最直观的选择。它提供了所有线程中操作的全局总顺序,这意味着所有线程看到的原子操作序列都是一致的。如果你对内存模型不熟悉,或者对特定并发场景的同步需求不确定,优先使用

seq_cst

。它能最大程度地保证程序的正确性,因为它提供了最强的同步保证。然而,这种强保证通常伴随着最高的性能开销,因为它可能需要在硬件层面进行昂贵的全局同步(例如,在x86上,通常会使用

lock

前缀指令或隐式内存屏障)。我个人觉得,对于大多数非极端性能要求的场景,或者你正在调试一个并发问题时,

seq_cst

是你的安全港。只有当你通过性能分析工具确定

seq_cst

是瓶颈时,才考虑使用更弱的内存序。

2.

memory_order_acquire

memory_order_release

(获取-释放顺序):这对是实现“生产者-消费者”模型或更复杂同步模式的常用组合。

memory_order_release

用于生产者写入数据并释放信号。它保证在

release

操作之前的所有内存写入操作,对之后执行

acquire

操作的线程是可见的。可以想象成一个“写屏障”,确保之前的写入都已完成并对其他线程可见。

memory_order_acquire

用于消费者读取信号并获取数据。它保证在

acquire

操作之后的所有内存读取操作,能看到在对应的

release

操作之前完成的所有写入。可以想象成一个“读屏障”,确保能看到其他线程的最新数据。这种组合提供了比

seq_cst

更弱但仍非常强大的同步保证,且通常性能优于

seq_cst

,因为它只在特定的同步点提供排序保证,而不是全局排序。这是我最常使用的内存序组合,因为它能满足绝大多数的同步需求,同时提供了不错的性能。

3.

memory_order_acq_rel

(获取-释放顺序):这个用于读-改-写(RMW)操作,例如

fetch_add

compare_exchange_weak

,当这些操作既需要获取最新值,又需要将新值释放给其他线程时使用。它结合了

acquire

release

的语义,保证了RMW操作既能看到之前

release

操作写入的数据,又能将其自身及之前的修改对后续

acquire

操作可见。这比单独的

acquire

release

更复杂,但对于某些原子更新操作来说是必要的。

4.

memory_order_relaxed

(松散顺序):这是最宽松的内存序,只保证操作本身的原子性,不提供任何跨线程的排序保证。这意味着编译器和硬件可以随意重排

relaxed

操作与其他内存操作的顺序。因此,它通常性能最好,但也是最难正确使用的。何时使用? 仅当你确定你只需要原子性,而不需要任何排序保证时。例如,一个简单的计数器,你只关心最终的计数结果,而不关心中间的递增顺序。或者,一个统计变量,它的值可能在多个线程中被修改,但你只关心它的近似值,不关心修改的精确顺序。如果你不确定,就不要用它。我见过太多因为滥用

relaxed

而导致难以追踪的并发bug。

选择策略总结:

seq_cst

开始。 确保功能正确。性能瓶颈分析。 如果

seq_cst

成为性能瓶颈,并且你确定需要优化,再考虑使用更弱的内存序。理解并发模式。 生产者-消费者模式通常用

acquire

/

release

避免

consume

C++20已经弃用,即使在旧标准中也应尽量避免。测试!测试!测试! 并发代码的bug是出了名的难以复现和调试。使用各种并发测试工具和方法来验证你的内存序选择。

记住,过度的优化往往是万恶之源。在并发编程中,正确性永远排在性能之前。

以上就是C++内存模型演进 C++11到C++20改进的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1472720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
C++成员访问控制 public private protected区别
上一篇 2025年12月18日 19:50:54
C++内存重释放问题 双重释放风险防范
下一篇 2025年12月18日 19:51:13

相关推荐

  • VSCode中怎么使用REM_VSCode移动端REM布局编写与换算教程

    答案:REM_VSCode插件可自动将像素转换为REM,需配置rootFontSize和precision,支持自动与手动转换,确保与html的font-size一致,配合media query适配不同屏幕,若插件异常可检查配置、重启或重装,替代工具有postcss-pxtorem、在线转换工具及浏…

    2026年9月21日
    000
  • 小红书发视频比例是多少?小红书视频是16比9还是4比3

    在当今社交媒体蓬勃发展的背景下,人们通过各种平台获取信息、娱乐和交流。其中,小红书作为一个以短视频和图文笔记为主的社交电商平台,吸引了大量用户群体。本文将围绕小红书平台上视频内容的占比情况进行分析,并探讨其背后的原因及未来发展趋势。 一、小红书视频内容占比现状 根据相关数据统计,目前小红书平台上的视…

    2026年9月21日
    200
  • UC浏览器如何开启省流模式_UC浏览器开启省流模式方法

    开启省流模式可减少UC浏览器流量消耗,通过设置菜单、首页快捷入口或搜索功能三种方式均可启用,系统会压缩网页内容以节省资源。 如果您在使用UC浏览器时希望减少数据流量消耗,尤其是在移动网络环境下,可以通过开启省流模式来优化网页加载方式。该功能会压缩页面内容,降低图片质量和资源体积,从而节省流量。 本文…

    2026年9月21日
    100
  • MySQL性能模式监控资源_MySQL瓶颈定位精确工具

    MySQL性能模式监控资源_MySQL瓶颈定位精确工具MySQL性能模式监控资源_MySQL瓶颈定位精确工具MySQL性能模式监控资源_MySQL瓶颈定位精确工具MySQL性能模式监控资源_MySQL瓶颈定位精确工具

    mysql性能模式通过事件记录精准定位瓶颈,核心步骤包括:1.启用并配置performance schema,选择性开启消费者和仪器;2.监控等待事件、sql语句、阶段、i/o、内存及锁等关键指标;3.分析events_waits_summary_global_by_event_name等表识别资源…

    2026年9月21日 用户投稿
    000
  • 三星在电视端首发Perplexity AI应用程序,带来更具创新性AI体验

    10 月 23 日消息,三星电子于美国当地时间 21 日宣布,率先在电视终端推出 perplexity ai 应用程序,为三星电视用户带来更富创新的 ai 使用体验。 借助该应用程序,用户在安排日常生活、查找特定影视内容、创建梦幻体育联赛阵容或策划万圣节活动等场景中,可获得 AI 以卡片式回复框形式…

    2026年9月21日
    000
  • 帕鲁高管回应《幻兽帕鲁:帕鲁农场》疑似碰瓷《宝可梦 pokopia》:乱讲阴谋论

    帕鲁高管回应《幻兽帕鲁:帕鲁农场》疑似碰瓷《宝可梦 pokopia》:乱讲阴谋论帕鲁高管回应《幻兽帕鲁:帕鲁农场》疑似碰瓷《宝可梦 pokopia》:乱讲阴谋论帕鲁高管回应《幻兽帕鲁:帕鲁农场》疑似碰瓷《宝可梦 pokopia》:乱讲阴谋论帕鲁高管回应《幻兽帕鲁:帕鲁农场》疑似碰瓷《宝可梦 pokopia》:乱讲阴谋论

    在不久前的任天堂直面会上,官方公布了一款宝可梦ip的衍生新作——《宝可梦 pokopia》。这款作品让玩家化身一只能够变身成人类训练家的百变怪,主打种田与建造玩法,属于模拟经营类游戏。 视频欣赏: 无独有偶,几天后,《幻兽帕鲁》的开发商PocketPair也正式公布了他们的全新衍生作《幻兽帕鲁:帕鲁…

    2026年9月21日 用户投稿
    000
  • 如何使用mysql设计客户信息管理项目

    答案:设计客户信息管理系统需先明确功能需求,再合理规划数据库结构。1. 根据客户需求划分模块,包括客户基本信息、分类、状态、跟进记录等;2. 创建核心表如customers、company_info、follow_ups和users,确保字段完整且符合业务逻辑;3. 在关键字段上建立索引以提升查询效…

    2026年9月21日
    300
  • Windows 10功能更新1909版错误0xc19001e1怎么解决?

    0xc19001e1错误可通过禁用第三方安全软件、清理磁盘空间、运行Windows更新疑难解答及重置更新组件解决。首先卸载非微软安全软件并重启;确保C盘有20GB以上可用空间,通过设置清理临时文件;使用内置疑难解答工具修复更新问题;最后以管理员身份运行命令提示符,停止wuauserv、cryptSv…

    2026年9月21日
    000
  • windows怎么格式化硬盘_windows硬盘格式化方法

    格式化硬盘可通过四种方法完成:1. 使用磁盘管理工具,进入“此电脑”→“管理”→“磁盘管理”,右键目标分区选择“格式化”,设置文件系统及是否快速格式化;2. 通过文件资源管理器,在“此电脑”中右键驱动器选择“格式化”,选择NTFS等文件系统并开始操作;3. 使用命令提示符运行diskpart工具,依…

    2026年9月21日
    100
  • 如何在Linux中进程替换 Linux

    <img src="https://img.php.cn/upload/article/000/969/633/175729116271538.jpeg" alt="如何在linux中进程替换 linux 在Linux系统中,进程替换的核心机制在于利用 exec …

    用户投稿 2026年9月21日
    000
  • 夸克Ai搜索如何设置默认_夸克Ai搜索默认引擎更改

    首先在夸克APP中将默认搜索引擎设为AI引擎,再开启相关AI功能开关以启用AI搜索服务。具体步骤:1、打开夸克APP,点击右下角菜单进入设置;2、选择“通用”选项,点击“搜索引擎”;3、选择“AI引擎”或“夸克AI搜索”作为默认服务;4、返回主界面测试搜索关键词,确认AI结果是否展示;5、进入“AI…

    2026年9月21日
    400
  • Laravel中的Blade模板引擎基础用法

    blade模板引擎在laravel中用于简化视图开发。具体使用方法如下:1.输出变量:{{ $variable }}。2.条件判断:@if、@else、@elseif。3.循环:@foreach。4.模板继承:@extends、@section、@yield。blade让视图代码更简洁易读,但需注意…

    2026年9月21日
    000
  • Windows10重置此电脑卡住不动了怎么办_Windows10重置电脑卡住修复方法

    重置电脑卡住时,先等待2-4小时观察硬盘灯是否闪烁,确认系统是否仍在运行;若无响应,可尝试断开网络避免更新下载、调整BIOS关闭Secure Boot并启用Legacy模式;或使用Windows安装U盘启动,进入修复模式执行启动修复、chkdsk磁盘检查,以及通过三次强制关机触发恢复环境重试重置。 …

    2026年9月21日
    000
  • Linux查看系统日志的常用命令

    答案是查看Linux日志需综合使用journalctl、dmesg、tail、grep等工具。journalctl用于systemd系统集中查询服务及内核日志,支持时间、优先级、字段等多维度过滤;dmesg专注内核启动与硬件问题;tail -f实时监控日志动态;cat、grep、less结合正则和管…

    用户投稿 2026年9月21日
    000
  • Workerman服务启动失败的排查步骤

    workerman服务启动失败的排查步骤如下:1. 检查配置文件,确保无语法错误;2. 查看系统日志,寻找错误线索;3. 检查端口占用情况,确保端口未被占用;4. 调整文件权限,确保workerman有足够权限;5. 检查php环境,确保版本兼容且扩展已安装。 关于Workerman服务启动失败的排…

    2026年9月21日
    200
  • 如何为VSCode设置自定义的代码高亮颜色?

    答案:通过settings.json中的editor.tokenColorCustomizations可自定义VSCode代码高亮颜色,支持全局或特定主题下修改关键字、字符串等元素颜色,结合textMateRules和作用域精确控制,提升代码可读性。 为 VSCode 设置自定义的代码高亮颜色,可以…

    2026年9月21日
    000
  • 百度浏览器自动跳转怎么办 百度浏览器页面跳转广告拦截方法

    百度浏览器自动跳转通常由恶意软件或设置被篡改引起,需检查浏览器设置、清除异常插件、修复快捷方式与注册表,并使用安全软件扫描清理,同时启用广告拦截与隐私保护功能以彻底解决问题。 百度浏览器出现自动跳转,通常不是浏览器本身的问题,而是由恶意软件、插件或设置被篡改导致的。解决这个问题需要从多个方面入手,检…

    2026年9月21日
    100
  • 压力测试(Benchmark)Swoole服务的工具与方法

    进行swoole服务的压力测试是为了确保服务在高负载下稳定运行。1. 选择工具:apache jmeter、wrk、locust。2. 使用方法:jmeter通过脚本配置,wrk通过命令行,locust通过python脚本。3. 注意事项:环境隔离、数据监控、脚本设计。4. 优化点:内存泄漏、连接池…

    2026年9月21日
    000
  • Windows11内存占用率过高怎么解决_Windows11内存占用过高修复方法

    1、通过任务管理器结束高内存占用进程;2、禁用Superfetch(SysMain)服务以降低内存负担;3、优化启动项减少后台负载;4、升级物理内存条提升系统性能。 如果您发现Windows 11系统运行缓慢,并且任务管理器显示内存占用率持续处于高位,这可能是由于后台进程过多、系统服务占用资源或硬件…

    2026年9月21日
    100
  • mysql常用存储引擎有哪些

    InnoDB是现代MySQL应用的首选存储引擎,因其支持事务(ACID)、行级锁、外键约束、崩溃恢复和MVCC,适用于高并发、数据完整性要求高的OLTP场景;MyISAM虽读取快但仅支持表级锁且无事务和外键,适用于读多写少的简单场景,已逐渐被淘汰;Memory引擎将数据存于内存,速度快但易失,适合临…

    2026年9月21日
    000

发表回复

登录后才能评论
关注微信