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的这行吧