8种常见数据结构及其特点简介

8种常见数据结构及其特点简介

golang 线程安全与非线程安全的数据类型?

lanbing:

线程安全(Thread Safety):指的是当多个goroutine并发访问共享资源(如变量、数据结构等)时,不会导致数据不一致或者程序崩溃的问题。线程安全通常通过同步机制来保证,比如互斥锁(sync.Mutex)、读写锁(sync.RWMutex)、条件变量(sync.Cond)、通道(channel)等。

golang 常见的性能优化策略和实践方法

lanbing:

6、代码逻辑优化

(1)避免反射,反射性能差

(2)减少锁粒度: 用锁分片或读写锁降低竞争。

(3)代码简洁化:减少不必要的函数调用与嵌套逻辑。

(4)减少不必要的闭包函数。

(5)代码书写规范化与严谨化,避免不必要的内存逃逸、内存泄露

【mysql 锁】Next-Key Lock 详解

lanbing:

感谢您的评论,我仔细看了一下,是这个例子举的不够严谨。

(2)范围查询的锁范围

示例:

表数据:id=1, 3, 5, 8, 11

执行 SELECT * FROM t WHERE id = 5 FOR UPDATE;

Next-Key Lock 会锁定区间 (3,5] 和 (5,8]。

事务 B 若尝试插入 id=4 或 id=6,会被阻塞。

缺少一个补充条件,即 id 的索引类型,如果id 普通索引,那么上述结论是正确的,普通索引可引发就是间隙锁。

但如果id 是唯一索引,根据优化规则,Next-Key Lock会退化为行锁,仅锁定该行记录,即例子中的id=5 。

【mysql 锁】Next-Key Lock 详解

lanbing:

感谢您的评论,我仔细看了一下,是这个例子举的不够严谨。

(2)范围查询的锁范围

示例:

表数据:id=1, 3, 5, 8, 11

执行 SELECT * FROM t WHERE id = 5 FOR UPDATE;

Next-Key Lock 会锁定区间 (3,5] 和 (5,8]。

事务 B 若尝试插入 id=4 或 id=6,会被阻塞。

缺少一个补充条件,即 id 的索引类型,如果id 普通索引,那么上述结论是正确的,普通索引可引发就是间隙锁。

但如果id 是唯一索引,根据优化规则,Next-Key Lock会退化为行锁,仅锁定该行记录,即例子中的id=5 。

【mysql 锁】Next-Key Lock 详解

时光倒流二十年7:

第5点的(2)按照前面的理论,应该是锁定id=5的这行吧