golang sync.Map 分析与思考

1 使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "fmt" "sync" ) func main() { m := sync.Map{} m.Store(1, 1) if n, ok := m.Load(1); ok { i := n.(int) fmt.Println(i) } } 2 实现(go1.18.2) 源码摘录(点击展开)

golang map 分析与思考

1 使用 1 2 3 4 5 6 7 8 9 package main import "fmt" func main() { m := make(map[int]int) m[1] = 2 fmt.Println("map value", m) } 2 实现 执行 go tool compile -S main.go 获取 plan9 汇编结果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

线上 c++ 服务内存泄漏排查

1 背景 同事某日收到某服务(c++编写)内存报警,具体内存使用情况如下图 可以看到有非常明显的内存持续性上涨,初步怀疑为内存泄漏。以下在 sim 环境对

golang 1.14.1 bug 导致线上服务卡死

现象 12月29日晚突然服务报警,上游服务访问超时数量显著上升,初步排查访问某一容器的链接全部超时,摘流后恢复。 继续查看指标,发现摘流后 cpu 占用

并行编程-lock-free & wait-free

先占个坑 1 定义 2 lock-free 与 lockless 3 lock-free 的数据结构 4 实现原理 5 思考与启发 5.1 可借鉴的思想 足够小的临界区:这意味着哪怕直接使用 mutex,只要保持临界区够小,

并行编程-内存模型(Memory Model)

先看两个问题 std::shared_ptr::use_count long use_count() const noexcept; 返回管理当前对象的不同 shared_ptr 实例(包含 this )数量。若无管理对象,则返回 ​0​。多线程环境下, use_count 返回的值是近似的(典型实现使用

c++ std::sort() 使用方式不对引起的 coredump

一种 coredump 复现方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <algorithm> #include <iostream> #include <vector> struct Order { Order(long t) : timestamp(t) {} long timestamp; }; int main() { std::vector<Order> t; for (int i = 0; i < 16; i++) { t.push_back({i}); } for (int i =

ThreadPool 分析和对比

线程池分类及对比 HS/HA(半同步半异步):主线程处理工作任务并存入工作队列,工作线程从工作队列取出任务进行处理,如果工作队列为空,则取不到