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

11|百花齐放,百家争鸣:更多的线程池

你好,我是鸟窝。
在上节课我介绍了常用的 Rayon 线程池和 ThreadPool 线程池。实际上在我们大部分的开发过程中,使用这两个就足够了。这两个各有特色,可以满足我们从简单到复杂的多种使用场景。但是,对于线程池这个通用的技术手段,Rust 生态圈肯定还会有各种各样的线程池,就像其他编程语言一样,各种轮子不断涌现。
这节课我介绍几个知名度还算比较高的线程池,让你了解一下,开拓一下视野,说不定某个线程池库的某个特殊功能正好满足你的需求。

fast_threadpool 库

这个线程池实现旨在最小化延迟。具体来说,你得保证在任务执行之前不会承担线程创建的开销。新线程仅在工作线程的“空闲时间”,例如,返回作业结果之后,才会被创建。延迟的唯一可能情况是缺乏“可用”的工作线程。为了最小化这种情况发生的概率,该线程池会持续保持一定数量的工作线程可用(可配置)。
该实现允许你异步等待作业结果,因此你可以将其用作异步运行时中  spawn_blocking  函数的替代品。下面这个例子是创建了一个使用默认参数配置的线程池,并执行了一个任务。execute 方法是一个阻塞方法,直到任务完成它才会返回:
use fast_threadpool::{ThreadPool, ThreadPoolConfig};
use std::time::Duration;
use std::thread;
fn main() {
let threadpool = ThreadPool::start(ThreadPoolConfig::default(), ()).into_sync_handler();
let _ = threadpool.execute(|_| {
println!("Hello from my custom thread!");
});
match threadpool.launch(|_| {
thread::sleep(Duration::from_secs(10));
println!("Hello from my custom sleep thread!");
}) {
Ok(join_handler) => {
println!("Task launched successfully!");
join_handler.join().unwrap();
},
Err(e) => eprintln!("Failed to launch task: {:?}", e),
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Rust生态圈中存在多种线程池库,如fast_threadpool和rusty_pool,它们提供了不同的特性和功能,可以满足不同的使用场景需求。 2. fast_threadpool库旨在最小化延迟,通过异步等待作业结果,可以作为异步运行时中spawn_blocking函数的替代品,提供了execute和launch两种方式来执行任务。 3. rusty_pool基于crossbeam的多生产者多消费者通道的弹性线程池实现,支持任务结果的等待和异步支持,具有核心池大小和最大池大小的概念,可用作future执行器。 4. rusty_pool线程池在大多数情况下避免了使用锁,提高了并发性能,仅在使用join函数时需要使用锁来保护Condvar,以确保线程之间的正确同步。 5. 线程池的使用方法和功能包括evaluate()、complete()等函数返回JoinHandle,可用于等待提交的任务或future的结果,也支持async功能,包括spawn()和try_spawn()函数,用于创建任务和轮询future。 6. scheduled-thread-pool库是可调度延迟执行并周期性重复的线程池,可以根据预定的时间安排来执行任务,实现更加灵活的任务调度,适用于定时任务、调度任务、游戏服务器和实时系统等场景。 7. scheduled-thread-pool库的方法包括execute(job)、execute_after(delay, job)、execute_at_fixed_rate(initial_delay, rate, f)等,支持不同的定时任务执行方式。 8. 通过使用计划线程池,可以更加高效地管理和执行各种定时任务,提高系统的自动化程度和可靠性。 9. Rust并发编程中的线程池库各有特色,如fast_threadpool追求性能和最小延迟,rusty_pool提供核心线程和非核心线程,scoped-thread-pool提供scoped的功能,scheduled-thread-pool提供了定时和周期性执行任务的能力。 10. 了解不同线程池库的特性和功能,可以为特定的并发编程场景选择合适的线程池库,满足不同的并发编程需求。

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

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部