首页
文章列表
标签墙
返回找工具啦
并发控制
共 16 篇文章
MySQL InnoDB Undo Log回滚段与MVCC快照读的关联
2026-06-18 06:36:14
MySQL InnoDB Undo Log回滚段与MVCC快照读的关联 要理解MySQL InnoDB如何实现高并发读写且互不阻塞,就必须弄清楚它的两个核心机制:MVCC 和 Undo Log。它们之间的关系是:Undo Log 是 MVCC 能够工作的底层数据基础,而回滚段则是组织和管理这些数据的
MySQL
InnoDB
UndoLog
8
0
PostgreSQL MVCC多版本并发控制中快照隔离的实现原理
2026-06-15 06:41:50
PostgreSQL MVCC多版本并发控制中快照隔离的实现原理 数据库并发操作时,最令人头疼的问题就是数据冲突:一个事务正在修改数据,另一个事务同时要读取它,读到的到底是修改前还是修改后的值?直接读“最新值”可能读到未提交的中间状态,导致脏读;给整个表加锁又会让性能大打折扣。 PostgreSQL
PostgreSQL
MVCC
快照隔离
11
0
Python asynciogather和as_completed在并发控制上的行为差异
2026-06-03 21:48:51
Python asyncio gather和ascompleted在并发控制上的行为差异 理解 gather 和 ascompleted 在控制并发任务时的核心区别,能帮你精确选择最合适的方法,避免潜在的性能或逻辑陷阱。 核心差异一览 gather 像一个“齐步走”指挥官。 它将所有任务收集起来,要
Pythonasyncio
gather
as_completed
28
0
MySQL InnoDB的间隙锁在范围查询中如何阻塞幻读
2026-06-03 18:48:25
MySQL InnoDB的间隙锁在范围查询中如何阻塞幻读 在并发的数据库事务中,“幻读”指一个事务在前后两次按相同条件查询时,第二次查询看到了第一次查询未返回的其他事务插入的新行,仿佛出现了“幻影”。MySQL InnoDB 存储引擎在 REPEATABLE READ(可重复读)隔离级别下,通过一种
MySQL
InnoDB
间隙锁
34
0
Go语言的sync.Map与并发安全Map
2026-06-02 02:18:15
Go语言的sync.Map与并发安全Map 在Go语言中,当多个Goroutine(可以理解为轻量级线程)需要同时读写同一个map时,会发生竞争条件,导致程序崩溃或数据错乱。本文将指导你如何利用Go标准库中的sync.Map以及通过sync.RWMutex自制“并发安全Map”来解决这一问题,并帮助
Go语言
sync.Map
并发安全
30
0
SQLite的WAL模式与并发读写性能
2026-05-31 02:15:38
SQLite的WAL模式与并发读写性能 SQLite默认采用回滚日志(Rollback Journal)模式,该模式在并发场景下,读写操作会相互阻塞,导致性能瓶颈。WAL(WriteAhead Logging,预写式日志)模式是SQLite提供的一种更高效的并发控制机制,它通过改变数据持久化的方式,
SQLite
WAL模式
并发读写
34
0
Go语言context.Context的传递链与取消机制
2026-05-29 18:22:01
Go语言context.Context的传递链与取消机制 context.Context 是 Go 语言中用于在 goroutine 之间传递请求域元数据、控制超时与取消信号的标准化接口。正确使用 context 能有效防止 goroutine 泄漏,并实现优雅的并发控制。下面通过循序渐进的步骤,掌
Go语言
context
传递链
50
0
Go语言select和switch的区别:为什么select只能用于channel
2026-05-14 00:16:39
Go语言select和switch的区别:为什么select只能用于channel Go语言中,select 语句和 switch 语句在表面上看起来非常相似:它们都使用了 case 关键字,都用于处理多路分支逻辑。然而,它们在底层机制、应用场景以及设计初衷上有着本质的区别。switch 是一种通用
Go语言
select
switch
59
0
Go语言sync.WaitGroup的Add和Done不匹配导致死锁
2026-05-06 00:19:44
Go语言sync.WaitGroup的Add和Done不匹配导致死锁 Go 语言中的 sync.WaitGroup 是用于等待一组 Goroutine 完成执行的同步原语。死锁通常发生在 Add 增加的计数器与 Done 减少的计数器数量不一致,或者 Wait 被调用时计数器非零的情况下。解决此问题
Go语言
死锁
并发编程
45
0
Go语言sync.Cond与channel在条件等待中的选择
2026-04-30 09:20:22
Go语言sync.Cond与channel在条件等待中的选择 在Go语言的并发编程中,让一个Goroutine等待特定条件成立是常见需求。Go标准库提供了sync.Cond(条件变量)和channel(通道)两种机制来实现这一功能。虽然两者都能达到“等待”和“通知”的目的,但它们的适用场景和底层逻辑
Go语言
并发编程
sync.Cond
74
0
MySQL MVCC多版本并发控制的实现原理
2026-04-26 23:15:11
MySQL MVCC多版本并发控制的实现原理 MySQL 的 InnoDB 引擎通过 MVCC(MultiVersion Concurrency Control,多版本并发控制)实现了在不加锁的情况下进行并发读写。这种机制让“读操作”和“写操作”互不冲突,极大地提升了数据库的性能。MVCC 的核心实
MySQL
MVCC
InnoDB
113
0
Go语言Context.WithTimeout在级联调用中的取消传播
2026-04-20 14:26:27
Go语言Context.WithTimeout在级联调用中的取消传播 Context.WithTimeout 是 Go 语言中控制并发操作生命周期的核心机制。在微服务或级联调用(A调用B,B调用C)中,当上游请求因超时被取消时,取消信号必须自动、迅速地传播到下游,以释放所有正在运行的 Gorouti
Go语言
Context
级联调用
68
0
Python asyncio.Semaphore在限制并发请求数中的应用
2026-04-19 22:16:21
Python asyncio.Semaphore在限制并发请求数中的应用 当使用 asyncio 处理大量网络请求(如爬虫或API调用)时,为了追求极致速度,往往会创建成千上万个并发任务。如果不加限制,这种“瞬时爆发”的流量会瞬间耗尽本地带宽、导致目标服务器触发拒绝服务保护,甚至直接封禁IP。asy
Python编程
异步编程
并发控制
113
0
Go 等待组:sync.WaitGroup 与同步
2026-04-03 21:07:18
Go 等待组:sync.WaitGroup 与同步 在 Go 语言中,并发是核心特性之一。你经常需要启动多个 goroutine(轻量级线程)来并行处理任务,但主程序不能提前退出——否则后台 goroutine 会被强制终止。sync.WaitGroup 就是用来解决这个问题的标准工具:它让你能“等
Go并发
sync.WaitGroup
goroutine同步
82
0
C++ 原子锁存器Atomic Flag实现自旋锁
2026-04-03 18:42:11
C++ 原子锁存器Atomic Flag实现自旋锁 C++11 引入了 std::atomicflag,这是标准库中最轻量级的原子类型,专为实现无锁同步原语(如自旋锁)而设计。它只支持两个操作:测试并设置(testandset)和清除(clear),天然适合构建高效的自旋锁。 理解 std::ato
C++原子操作
自旋锁实现
atomic_flag
104
0
ST语言多线程环境下资源锁(Mutex)未释放导致的死锁预防
2026-03-18 04:08:08
在 ST(Structured Text)语言编写的 PLC 程序中,当多个任务(Task)或多个循环执行的程序组织单元(POU)并发访问同一共享资源(如全局变量、硬件寄存器、通信缓冲区、配方数据块)时,若未对访问过程施加排他性控制,极易引发数据错乱、状态不一致甚至系统级死锁。其中,资源锁(Mute
ST语言
PLC编程
死锁预防
101
0