golang sync.Map 分析与思考2022-10-101 使用 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 分析与思考2022-07-211 使用 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++ 服务内存泄漏排查2022-03-151 背景 同事某日收到某服务(c++编写)内存报警,具体内存使用情况如下图 可以看到有非常明显的内存持续性上涨,初步怀疑为内存泄漏。以下在 sim 环境对阅读更多
golang 1.14.1 bug 导致线上服务卡死2022-01-09现象 12月29日晚突然服务报警,上游服务访问超时数量显著上升,初步排查访问某一容器的链接全部超时,摘流后恢复。 继续查看指标,发现摘流后 cpu 占用阅读更多
golang 1.9.2 升级至 1.13.5 导致 cpu 使用率大幅上升2021-12-05现象 负责的规则引擎服务之前一直使用 golang 1.9.2 出于对性能及开发效率的考虑,计划升级至 1.13.5。修改版本至1.13.5后在 sim 和 pre 等环境部署,观察程阅读更多
并行编程-lock-free & wait-free2021-10-25先占个坑 1 定义 2 lock-free 与 lockless 3 lock-free 的数据结构 4 实现原理 5 思考与启发 5.1 可借鉴的思想 足够小的临界区:这意味着哪怕直接使用 mutex,只要保持临界区够小,阅读更多
并行编程-内存模型(Memory Model)2021-10-06先看两个问题 std::shared_ptr::use_count long use_count() const noexcept; 返回管理当前对象的不同 shared_ptr 实例(包含 this )数量。若无管理对象,则返回 0。多线程环境下, use_count 返回的值是近似的(典型实现使用阅读更多
c++ std::sort() 使用方式不对引起的 coredump2021-06-22一种 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 =阅读更多
【译】侵入式链表(Intrusive Lists)2021-01-16原文:https://www.codeofhonor.com/blog/avoiding-game-crashes-related-to-l阅读更多
ThreadPool 分析和对比2020-03-27线程池分类及对比 HS/HA(半同步半异步):主线程处理工作任务并存入工作队列,工作线程从工作队列取出任务进行处理,如果工作队列为空,则取不到阅读更多