Rust 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
462 人已学习
新⼈⾸单¥98
Rust 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

09|蓄势待发,并行天下(一):常用线程池之Rayon

你好,我是鸟窝。
在多线程编程中,频繁地创建和销毁线程会带来较大的系统开销,尤其是在需要大量并发执行短任务的场景下。线程池是一种用于管理和复用线程的技术,它可以有效地解决这个问题。
线程池维护着一个线程集合,这些线程在没有任务时处于等待状态,一旦有新的任务提交,线程池就会分配一个空闲线程去执行该任务。任务执行完毕后,线程并不会立即销毁,而是返回线程池继续等待下一个任务。这样就避免了频繁创建和销毁线程的开销,提高了程序的性能。
线程池的优点:
降低资源消耗:通过复用已创建的线程,减少了线程创建和销毁的开销。
控制并发度:线程池可以限制同时执行的线程数量,从而有效控制系统的并发度,避免资源耗尽和过度竞争。
提高响应速度:当有新任务到达时,可以直接分配线程池中的空闲线程执行,无需等待线程创建。
提高线程的可管理性:线程池可以统一管理和监控线程,例如限制最大线程数、设置线程的生命周期等。
Rust 标准库 std::thread 提供了创建和管理线程的基本功能,但并没有内置线程池的实现。不过,Rust 社区提供了许多优秀的第三方库来实现线程池,接下来我介绍几款常用的线程池库。

Rayon 线程池

Rayon 是一个 Rust 库,旨在使并行计算变得简单易用。它通过提供高级的抽象,例如并行迭代器和任务并行,隐藏了底层线程管理的复杂性。Rayon 的核心是一个工作窃取(work-stealing)线程池,它负责有效地调度和执行并行任务。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Rayon 是 Rust 库,提供了高级的抽象,隐藏了底层线程管理的复杂性,其线程池采用工作窃取机制,可以有效平衡各个线程的工作负载,最大程度地利用多核 CPU。 2. Rayon 提供了默认的全局线程池,同时也允许创建自定义的线程池,以满足特定需求。 3. ThreadPoolBuilder 是 Rayon 库中用于创建和配置线程池的工具,允许通过链式调用的方式设置线程池的各种属性,最后调用 build() 方法来创建一个 ThreadPool 实例。 4. Rayon 的全局线程池的特点包括自动管理线程池的大小、任务调度和执行,线程池的共享性,以及可以通过调用 rayon::ThreadPoolBuilder 创建自定义大小的线程池,并通过 Rayon::set_thread_pool 将其设置为全局线程池。 5. Rayon 提供了多种执行任务的方法,如 install()、scope()、scope_fifo() 等,以及查询状态的方法,如 current_num_threads、current_thread_has_pending_tasks 等。 6. 频繁地创建和销毁线程会带来较大的系统开销,尤其是在需要大量并发执行短任务的场景下,因此线程池可以有效解决这个问题。 7. Rayon 的全局线程池是一个静态、共享的线程池,用于管理并发任务,其大小会根据系统的核心数进行调整,任务会被分配给全局线程池中的线程执行,Rayon 会自动调度任务,确保任务高效执行。 8. `join`、`yield_local`、`yield_now` 是 Rayon 中的方法,分别用于合并多个线程的结果、主动让出当前线程,允许其他任务运行,以及让当前线程主动放弃其执行权,可能不仅仅是在当前线程池内进行调度。 9. `yield_local` 会让当前线程放弃 CPU 时间片,但只会在当前线程池内进行调度,而 `yield_now` 允许当前线程让出执行权并立刻交给其他线程,可能会跨线程池,允许操作系统或全局调度器介入调度,调度的范围更广。 10. Rayon 的全局线程池在整个程序生命周期内存在,并且会自动管理并发执行的任务,通过这个全局线程池,程序可以有效地分配计算任务到多个线程,从而充分利用多核处理器的计算能力。

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

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
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
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)