8 个版本
0.3.0 | 2021年1月8日 |
---|---|
0.2.3 | 2020年12月17日 |
0.2.1 | 2020年10月27日 |
0.1.2 | 2020年10月25日 |
#908 in 并发
每月下载量:31
22KB
425 行
快速线程池
此线程池实现针对最小化延迟进行了优化。特别是,您在任务执行前不会承担线程创建的成本。只有在工作者的“无用时间”(例如,在返回作业结果后)才会创建新线程。
延迟的唯一可能情况是缺少“可用”的工作者。为了最小化这种情况的概率,此线程池始终保持一定数量的工作者可用(可配置)。
此实现允许您异步等待作业的结果,因此您可以使用它作为您异步运行时中 spawn_blocking
函数的替代品。
使用
use fast_threadpool::{ThreadPool, ThreadPoolConfig};
let threadpool = ThreadPool::start(ThreadPoolConfig::default(), ()).into_sync_handler();
assert_eq!(4, threadpool.execute(|_| { 2 + 2 })?);
从异步任务中使用
use fast_threadpool::{ThreadPool, ThreadPoolConfig};
let threadpool = ThreadPool::start(ThreadPoolConfig::default(), ()).into_async_handler();
assert_eq!(4, threadpool.execute(|_| { 2 + 2 }).await?);
依赖项
~265–700KB
~13K SLoC