3个版本
0.1.2 | 2022年1月30日 |
---|---|
0.1.1 | 2020年1月6日 |
0.1.0 | 2019年12月2日 |
#2086 in 数据结构
每月下载量31次
7KB
82 行
miniqueue
一个极简的通用多线程队列,它聚合结果并将更多任务填充到队列中。
其语义与fold
/reduce
相反:它不是从一个数据集开始,而是从一个数据点开始,递归遍历它以展开更大的结构。
当处理依赖图时非常有用。它可用于编译器、包管理器和链接器/打包器。
用法
以下是一个简单的示例
let all_results = miniqueue::run(first_job, |job| {
let (result, more_jobs) = run_job(job)
(result, more_jobs)
});
将第一个应该运行的作业作为第一个参数传递。
第二个参数是一个闭包,它接收一个作业并执行它,并且应该返回一个包含
- 的元组<强>作业结果
- 一个包含更多需要在下一次迭代中执行的<强>作业
的所有作业都将被入队以供稍后执行。注意,以前已经执行过的作业将不会被再次调度。
<强>run强>的最终结果是一个HashMap,它聚合了<强>作业强>和<强>作业结果强>。
<强>作业强>和<强>作业结果强>都是泛型类型,因此可以是任何你想要的东西。
以下是一个包含自包含示例的测试用例
use miniqueue;
let result = run(1, |num| {
match num {
1 => Ok(("one", vec![ 2 ])),
2 => Ok(("two", vec![])),
_ => Ok(("", vec![]))
}
});
assert_eq!(result.unwrap().get(&1), Some(&"one"));
许可证
Copyright (c) 2019 Silvio Henrique Ferreira
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.