Skip to content

Commit 610425a

Browse files
committed
add README
1 parent 9dc2873 commit 610425a

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
介绍
2+
====
3+
4+
这个包用来在开发调试期,帮助排查程序中的死锁情况。
5+
6+
可以直接替代原生的`sync`包,在禁用死锁检查的时候,只会有非常小的性能差异,具体可以看Benchmark结果。
7+
8+
原理
9+
====
10+
11+
在开启死锁检查的时候,系统会维护一份全局的锁等待列表,其次每个锁都会有当前使用者的信息。
12+
13+
当一个goroutine要等待一个锁的时候,系统会到全局的等待列表里面查找当前这个锁的使用者,是否间接或直接的正在等待当前请求锁的这个goroutine。
14+
15+
死锁不一定只发生在两个goroutine之间,极端情况也可能是一个链条状的依赖关系,又或者可能出现自身重复加锁的死锁情况。
16+
17+
当出现死锁的时候,系统将提取死锁链上的所有goroutine的堆栈跟踪信息,方便排查故障原因。
18+
19+
因为需要维护一份全局的锁等待列表,所以这里会出现额外并且集中的一个全局锁开销,会导致明显的程序的并发性能下降。
20+
21+
全局锁的问题还会再继续研究和加以改进,但是目前这个包是不能用于生产环境的,只能用在开发和调试期作为死锁诊断的辅助工具。

0 commit comments

Comments
 (0)