问题描述
我有一个 rayon::ThreadPool
,我想用它来执行 Tokio 运行时上下文之外的 cpu 绑定任务。 cpu 绑定任务是同步任务。
问题是 spawn
要求闭包为 'static
,但我想使用借来的数据而不是制作拥有的副本。
最初我认为 scope
会起作用(并且代码也可以编译),但它似乎会阻塞直到关闭完成 - 这将违背我使用此池的目的,即不阻塞 tokio 运行时。
如何使用人造丝或任何其他线程池实现来实现这一点?
pub struct TaskPool {
pool: ThreadPool,}
impl TaskPool {
pub fn new(num_threads: usize) -> Self {
Self {
pool: ThreadPoolBuilder::new()
.num_threads(num_threads)
.build()
.unwrap(),}
}
pub async fn verify(&self,hash: &[u8],data: &[u8]) -> bool {
let (tx,rx) = oneshot::channel();
self.pool.spawn(|| {
let ok = hash == calc_sha1(data);
tx.send(ok).unwrap();
});
rx.await.unwrap()
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)