sync.Map 不是并发 map 的银弹
sync.Map 为读多写少、键集合稳定的场景做了专门优化,代价是接口装箱、没有长度、Range 不一致,以及删除后的键可能长期占着内存。先看清它的结构,再决定要不要用。
709 字
|
4 分钟
async Rust 的取消安全
在 select! 里丢掉的 future 会被 drop,而 drop 发生的位置就是取消点。一个操作是不是取消安全,取决于它在任意 await 处被打断后,有没有留下一半的状态。
845 字
|
4 分钟
asio 的 strand 与取消:两件容易用错的事
strand 保证的是“绑定到它的 handler 不会并发执行”,不是“对象线程安全”;取消是协作式的,组合操作被取消后留下什么状态,取决于它已经执行到哪一步。
732 字
|
4 分钟
Arc<Mutex<T>> 之外:Rust 共享状态的几种形状
Arc<Mutex<T>> 是默认答案,但不是唯一答案。计数器用原子、所有权转移用 channel、读多写少用写时复制、热点分片,每种结构都在用不同的方式回避同一个问题:锁的争用。
728 字
|
4 分钟
1
2