Rust 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
747 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
Rust 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

直播专场(四)|并发问题和并发测试

Part 1 并发问题

Mutex

重入
scope 范围太大

Rwlock

重入
读锁和写锁

Condvar

消费者在生产者通知之后进入等待,可能错过通知
虚假唤醒导致条件未满足

Once

初始化逻辑中再次调用

Barrier

启动的参与者不够

Atomic

错误的内存序
误以为的原子操作

mpsc

没有生产者,消费者无限等待

async

阻塞线程

竞争条件

不确定的结果

Part 2 并发测试

00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00

    单元测试 Test

    使用 std::thread::spawn 创建多个线程,模拟并发访问。
    使用 std::sync 原语(如 Mutex、RwLock、Atomic)或通道(mpsc)测试共享状态。
    增加线程竞争(例如通过 thread::yield_now 或短暂睡眠)以暴露潜在问题。

    单元测试 - 异步编程

    使用 #[tokio::test] 或 #[async_std::test] 运行异步测试。
    模拟高并发任务,检查资源竞争或死锁。
    使用 tokio::time::timeout 测试异步任务的超时行为。

    并发测试的难点

    非确定性:线程调度和异步任务执行顺序不可预测,问题可能在特定条件下触发。
    可重现性:并发 bug 难以稳定重现。
    覆盖率:需要测试多种线程交错和错误场景。

    Loom:一个用于测试并发程序的工具

    确认放弃笔记?
    放弃后所记笔记将不保留。
    新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
    批量公开的笔记不会为你同步至部落
    公开
    同步至部落
    取消
    完成
    0/2000
    荧光笔
    直线
    曲线
    笔记
    复制
    AI
    • 深入了解
    • 翻译
      • 英语
      • 中文简体
      • 法语
      • 德语
      • 日语
      • 韩语
      • 俄语
      • 西班牙语
    • 解释
    • 总结

    1. 并发问题包括 Mutex、Rwlock、Condvar、Once、Barrier、Atomic等,可能导致虚假唤醒、错误的内存序、竞争条件等问题。 2. 并发测试的难点包括非确定性、可重现性和覆盖率,需要使用工具如Loom、Shuttle和ThreadSanitizer进行测试。 3. 单元测试和异步编程是并发测试的重要组成部分,需要模拟高并发任务、资源竞争和死锁,并使用timeout测试异步任务的超时行为。 4. Loom是一个用于测试并发程序的工具,可以排列组合可能的并发执行并使用状态缩减技术来避免组合爆炸。 5. Shuttle是一个强大的并发测试库,通过模拟不同的执行顺序来测试并发代码,帮助发现潜在的竞态条件、死锁和其他并发问题。 6. ThreadSanitizer (TSan)是C/C++的并发调试工具,可以检测数据竞争,而Rust中可以使用RUSTFLAGS="-Z sanitizer=thread" cargo run/test来进行检测。

    仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
    《Rust 并发编程实战课》
    新⼈⾸单¥98
    立即购买
    登录 后留言

    精选留言

    由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
    收起评论
    大纲
    固定大纲
    Part 1 并发问题
    Mutex
    Rwlock
    Condvar
    Once
    Barrier
    Atomic
    mpsc
    async
    竞争条件
    Part 2 并发测试
    单元测试 Test
    单元测试 - 异步编程
    并发测试的难点
    Loom:一个用于测试并发程序的工具
    显示
    设置
    留言
    收藏
    沉浸
    阅读
    分享
    手机端
    快捷键
    回顶部
    文章页面操作
    MAC
    windows
    作用
    esc
    esc
    退出沉浸式阅读
    shift + f
    f11
    进入/退出沉浸式
    command + ⬆️
    home
    滚动到页面顶部
    command + ⬇️
    end
    滚动到页面底部
    ⬅️ (仅针对订阅)
    ⬅️ (仅针对订阅)
    上一篇
    ➡️ (仅针对订阅)
    ➡️ (仅针对订阅)
    下一篇
    command + j
    page up
    向下滚动一屏
    command + k
    page down
    向上滚动一屏
    p
    p
    音频播放/暂停
    j
    j
    向下滚动一点
    k
    k
    向上滚动一点
    空格
    空格
    向下滚动一屏
    播放器操作
    MAC
    windows
    作用
    esc
    esc
    退出全屏
    ⬅️
    ⬅️
    快退
    ➡️
    ➡️
    快进
    空格
    空格
    视频播放/暂停(视频全屏时生效)