首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
// bulma/atomic_mutex_hybrid.go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
// RequestCounter 请求计数器(混合方案:原子操作+Mutex)
|
||||
type RequestCounter struct {
|
||||
total atomic.Uint64 // 高频累加,用原子操作
|
||||
mu sync.Mutex // 互斥锁,保护复杂数据结构(map)
|
||||
details map[string]uint64 // 复杂结构,用 Mutex 保护
|
||||
}
|
||||
|
||||
// Inc 累加请求数:包含高频简单操作与复杂结构更新
|
||||
func (rc *RequestCounter) Inc(endpoint string) {
|
||||
rc.total.Add(1) // 无锁累加总数
|
||||
|
||||
// 复杂数据结构更新(map写入),通过加锁保护,避免数据竞争
|
||||
rc.mu.Lock()
|
||||
rc.details[endpoint]++
|
||||
rc.mu.Unlock()
|
||||
}
|
||||
|
||||
// Stats 获取统计结果:通过深拷贝,避免外部修改内部数据
|
||||
func (rc *RequestCounter) Stats() (uint64, map[string]uint64) {
|
||||
rc.mu.Lock()
|
||||
defer rc.mu.Unlock()
|
||||
// 深拷贝避免外部修改
|
||||
copyDetails := make(map[string]uint64, len(rc.details))
|
||||
for k, v := range rc.details {
|
||||
copyDetails[k] = v
|
||||
}
|
||||
return rc.total.Load(), copyDetails
|
||||
}
|
||||
|
||||
func main() {
|
||||
rc := &RequestCounter{details: make(map[string]uint64)}
|
||||
// 模拟3次接口请求
|
||||
rc.Inc("/api/users")
|
||||
rc.Inc("/api/posts")
|
||||
rc.Inc("/api/users")
|
||||
|
||||
// 查看统计结果
|
||||
total, details := rc.Stats()
|
||||
fmt.Printf("✅ 总请求数: %d\n", total)
|
||||
fmt.Printf("✅ 详情: %+v\n", details)
|
||||
}
|
||||
Reference in New Issue
Block a user