#thread #timeout #join #group #attempt #first #manage

threadgroup

将线程组作为单个单元管理,等待第一个完成的线程,在连接尝试时超时

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018年2月2日

#908并发

Download history 97/week @ 2024-03-13 197/week @ 2024-03-20 159/week @ 2024-03-27 183/week @ 2024-04-03 67/week @ 2024-04-10 48/week @ 2024-04-17 73/week @ 2024-04-24 13/week @ 2024-05-01 52/week @ 2024-05-08 88/week @ 2024-05-15 91/week @ 2024-05-22 88/week @ 2024-05-29 145/week @ 2024-06-05 109/week @ 2024-06-12 45/week @ 2024-06-19 19/week @ 2024-06-26

每月 354 次下载

MIT 许可证

14KB
129

ThreadGroup

此crate将一组线程(其闭包具有相同的返回类型)作为单个单元处理,允许您对组中的第一个就绪的线程执行 join()join_timeout()。内部,它使用通道来通知完成线程。

当您想要检查是否有任何线程已崩溃或提前返回以进行错误处理或进度报告时,这非常有用。这不可能使用 std::thread::JoinHanlde.join(),因为它是一个阻塞调用,所以线程2可能在您无限期地等待线程1时崩溃或完成。

另请参阅

如果 ThreadGroup 不是您需要的,并且无法改进以满足您的需求,请查看这些其他crates:

  • Thread_tryjoin 提供与 ThreadGroup::join_timeout() 相同的功能,其API更接近 std。但是它依赖于Linux-only API,并且一次只能处理一个线程(因此,大量线程的 try_join() 会导致时间或CPU的浪费)。
  • Thread-controlRunloop 允许您停止线程,并在它们崩溃或完成时测试而不阻塞。同样,这仅一次处理一个线程。
  • Rayon 是一种高级抽象,可以将计算分布到多个线程。
  • 线程池是处理短计算的常用方法,以避免反复支付高昂的设置成本。
  • Future 与线程无关,但通常是处理“任务A完成后启动任务B”算法的更好方式。

贡献

请通过 Github 创建问题和发送拉取请求。

线程组以MIT协议授权。除非您明确声明,否则您根据MIT许可证定义的、有意提交以包含在本作品中的任何贡献,将按照上述方式授权,不附加任何额外条款或条件。

无运行时依赖