锁与 MVCC
实测:WAL 下长事务快照冻结(写者连提三版读者始终读 v=0);SQLite 单写者模型下第二个写者 109ms 后失败;2 万行插入让 WAL 涨到 778KB,TRUNCATE 检查点后归零;InnoDB 间隙锁未实测。
共 11 篇 · 全部标签
实测:WAL 下长事务快照冻结(写者连提三版读者始终读 v=0);SQLite 单写者模型下第二个写者 109ms 后失败;2 万行插入让 WAL 涨到 778KB,TRUNCATE 检查点后归零;InnoDB 间隙锁未实测。
实测:relaxed 内存序下 120 万轮里过半出现违例,seq_cst 两次都是 0;seq_cst 存比 relaxed 贵 22 倍,16 字节 atomic 不加 -latomic 直接链不过。
实测:判断写在锁外会真的永久卡死;notify_one 在小缓冲上死锁,notify_all 慢 5 倍;wait_for(10µs) 实际睡 15.1 毫秒。
实测:C++20 协程 resume 只要 3.56 纳秒,10 万个协程 15.6 毫秒;Win32 Fiber 每个实占 32 KB,10 万个吃掉 3 GB;线程创建要 120.8 微秒。
实测:ABA 演示里 CAS“成功”接回早已弹走的节点;4 线程 30 万步对拍,无锁栈比有锁栈慢 2.07 倍,单线程无竞争时反而快 1.45 倍。
实测:无保护的自增丢掉 70.7% 的更新,而 -Wall -Wextra 一声不响;锁的无竞争单价 16.65 纳秒;try_lock_for(10µs) 实际卡 15.9 毫秒。
实测:std::async 每次派生 53.3 微秒,500 个小任务不 get 只靠析构兑现要 110.3 毫秒;launch::deferred 在 get 之前一次都不执行;COW 快照的盈亏平衡点。
实测:MinGW 上 sizeof(std::thread)=8、native_handle 与 pthread_self 同值;PTHREAD_CREATE_DETACHED 实际是 4。
实测:shared_mutex 无竞争比 mutex 贵 5 倍、8 线程纯读反而慢 9 倍;自旋锁无竞争快 45%,多两个可运行线程就慢 3.6 倍。
实测:100 万个待执行任务占 35.3 MB;200 个 CPU 任务 P=8 只要 38.1 ms,P=12 反而退回 50.9 ms;优雅关闭能兑现“一个不丢”。
实测:唤醒一次线程交接 11.35 微秒,原子自旋交接 61 纳秒,同一个逻辑处理器塞 2 个线程吞吐只涨 1%;一个空闲线程 37KB 提交内存,一个空进程 3.83MB 加 84 个句柄、启动 16.74 毫秒。