#thread-pool #simple

easy-threadpool

一个相对简单的线程池,可以向其中发送任务

4 个版本

0.3.2 2024 年 5 月 9 日
0.3.1 2024 年 5 月 9 日
0.3.0 2024 年 4 月 19 日
0.2.0 2024 年 4 月 19 日
0.1.0 2024 年 4 月 19 日

#223 in 并发

Download history 40/week @ 2024-04-21 3/week @ 2024-04-28 181/week @ 2024-05-05 13/week @ 2024-05-12 8/week @ 2024-05-19 2/week @ 2024-06-09 1/week @ 2024-06-16 15/week @ 2024-07-07

每月 184 次下载

MIT 许可证

49KB
711

简单线程池

一个简单的、对panic有容忍度的线程池,可以高效地工作并等待多个任务。

为什么制作这个库

这个线程池没有什么特别之处,我承认我没有真正研究其他可用的选项,因此这几乎肯定比下面列出的替代方案更差。我想做些有趣的事情,几个月前我需要线程池,所以我做了一个。除此之外,我对很多依赖有个人反对,所以这个线程池除了标准库外没有任何依赖。

有趣的功能

  • 除了标准库外没有依赖
  • 完全对panic有容忍度(就我测试的范围而言)。无论任务做什么,线程池都不会崩溃
  • 高效的同步原语函数,等待所有任务完成
  • 能够在同一组线程上执行多个'状态'任务的能力,即您可以有一个状态发送会panic的任务,这些任务不会影响其他状态

希望有

  • 我希望使线程池更可定制,带有自定义线程名称/堆栈大小
  • 我希望实现一种无效化/清除任务的方法,这样它们就不会占用CPU时间运行
  • 如果有时间,我很乐意研究动态地给线程分配堆栈大小,有点像 go 线程
  • 如果我真的疯了,我希望研究更有效地调度任务,也许基于某些优先级或给线程池的不同实例分配相等的CPU时间,而不是一个接一个地执行任务,从而使共享一个池更易用和更美观。

用法

将以下内容添加到 Cargo.toml 以使用该crate

[dependencies]
easy-threadpool = "0.3.1"

之后,像这样使用库

use std::error::Error;
use easy_threadpool::ThreadPoolBuilder;

fn main() -> Result<(), Box<dyn Error>> {

    fn job() {
        println!("Hello world!");
    }

    let builder = ThreadPoolBuilder::with_max_threads()?;
    let pool = builder.build()?;

    for _ in 0..10 {
        pool.send_job(job);
    }

    assert!(pool.wait_until_finished().is_ok());
    Ok(())
}

有关更多示例,请参阅源代码中的文档 这里

MSRV

此crate目前与rust 1.72.0或更高版本兼容。但这没有保证,因为开发仍在继续。

类似库

许可证

根据MIT许可证授权 (LICENSE-MIThttp://opensource.org/licenses/MIT)。

无运行时依赖