wip: 保存 Go 练习和技术笔记
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
_ "net/http/pprof" // 注册 pprof 相关 handler
|
||||
"time"
|
||||
)
|
||||
|
||||
// memoryBlocks 保留一部分内存块,方便内存剖析观察。
|
||||
// 这个全局变量会一直存活,便于分析堆上的对象。
|
||||
var memoryBlocks [64][]byte
|
||||
|
||||
func main() {
|
||||
// 启动 pprof HTTP 服务
|
||||
go func() {
|
||||
log.Println("pprof server started at http://localhost:6060/debug/pprof/")
|
||||
if err := http.ListenAndServe("localhost:6060", nil); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}()
|
||||
|
||||
// 模拟 CPU 密集型业务
|
||||
go cpuIntensiveTask()
|
||||
|
||||
// 模拟内存分配型业务
|
||||
go memoryIntensiveTask()
|
||||
|
||||
// 阻塞主协程,让程序持续运行
|
||||
select {}
|
||||
}
|
||||
|
||||
// fib 递归计算斐波那契数列,非常耗费 CPU
|
||||
func fib(n int) int {
|
||||
if n <= 1 {
|
||||
return n
|
||||
}
|
||||
return fib(n-1) + fib(n-2)
|
||||
}
|
||||
|
||||
// cpuIntensiveTask 循环执行 CPU 密集型计算
|
||||
func cpuIntensiveTask() {
|
||||
for {
|
||||
_ = fib(30)
|
||||
}
|
||||
}
|
||||
|
||||
// memoryIntensiveTask 循环分配内存并保留在全局切片中
|
||||
func memoryIntensiveTask() {
|
||||
for i := 0; ; i++ {
|
||||
idx := i % len(memoryBlocks)
|
||||
// 每次分配 1MB,替换掉旧的内存块
|
||||
memoryBlocks[idx] = make([]byte, 1<<20) // 1 << 20 = 1MB
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user