如何解决专用人造丝池提交工作并异步等待完成
我有一个 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 举报,一经查实,本站将立刻删除。