Skip to content

Commit 25f51ab

Browse files
committed
update perf
1 parent d0b309c commit 25f51ab

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

site/content/docs/quality/performance.md

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -151,37 +151,37 @@ import "testing"
151151
var x = make([][]int, 100)
152152
153153
func init() {
154-
for i := 0; i < 100; i++ {
155-
x[i] = make([]int, 100)
156-
}
154+
for i := 0; i < 100; i++ {
155+
x[i] = make([]int, 100)
156+
}
157157
}
158158
159159
func traverseVertical() {
160-
for i := 0; i < 100; i++ {
161-
for j := 0; j < 100; j++ {
162-
x[j][i] = 1
163-
}
164-
}
160+
for i := 0; i < 100; i++ {
161+
for j := 0; j < 100; j++ {
162+
x[j][i] = 1
163+
}
164+
}
165165
}
166166
167167
func traverseHorizontal() {
168-
for i := 0; i < 100; i++ {
169-
for j := 0; j < 100; j++ {
170-
x[i][j] = 1
171-
}
172-
}
168+
for i := 0; i < 100; i++ {
169+
for j := 0; j < 100; j++ {
170+
x[i][j] = 1
171+
}
172+
}
173173
}
174174
175175
func BenchmarkHorizontal(b *testing.B) {
176-
for i := 0; i < b.N; i++ {
177-
traverseHorizontal()
178-
}
176+
for i := 0; i < b.N; i++ {
177+
traverseHorizontal()
178+
}
179179
}
180180
181181
func BenchmarkVertical(b *testing.B) {
182-
for i := 0; i < b.N; i++ {
183-
traverseVertical()
184-
}
182+
for i := 0; i < b.N; i++ {
183+
traverseVertical()
184+
}
185185
}
186186
187187
```
@@ -277,6 +277,14 @@ sync.Pool 用出花儿的就是 fasthttp 了,可以看看我之前写的这一
277277

278278
最简单的复用就是复用各种 struct,slice,在复用时 put 时,需要 size 是否已经扩容过头,小心因为 sync.Pool 中存了大量的巨型对象导致进程占用了大量内存。
279279

280+
#### 修改 GOGC
281+
282+
当前有 memory ballast 和动态 GOGC 两种方案:
283+
1. [memory ballast](https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap/)
284+
2. [GOGCTuner](https://github.com/cch123/gogctuner)
285+
286+
后者可以根据 gc cycle 动态调整 GOGC,使应用占用的内存水位始终保持在 70%,既不 OOM,又能合理利用内存空间来降低 GC 触发频率。
287+
280288
### 调度占用过多 CPU
281289

282290
goroutine 频繁创建与销毁会给调度造成较大的负担,如果我们发现 CPU 火焰图中 schedule,findrunnable 占用了大量 CPU,那么可以考虑使用开源的 workerpool 来进行改进,比较典型的 [fasthttp worker pool](https://github.com/valyala/fasthttp/blob/master/workerpool.go#L19)

0 commit comments

Comments
 (0)