#调度器 #命令行 #工作窃取

bin+lib jerbs

命令行工作窃取调度器

2 个不稳定版本

0.2.0 2021 年 10 月 24 日
0.1.0 2021 年 10 月 20 日

#4#工作窃取

GPL-3.0 许可证

39KB
928

Build Status

jerbs

命令行工作窃取调度器。

安装

如果您使用 Nix 软件包管理器,在我的 覆盖层 中有一个软件包。

否则,您可以使用 cargo 构建 jerbs

cargo install jerbs

操作

创建一个工作数据库

$ jerbs work.db init

定义一个工作并排队一些重复项

$ jerbs work.db create --count 17 --data "info for thing to do 17 times"
1

输出是工作 ID,您可以用它来稍后编辑工作。

查看已安排的内容

$ jerbs work.db list-available -v
1       17      "info for thing to do 17 times"

(注意:不要为脚本使用详细输出(-v)。它是可读的,格式可能不稳定。)

运行一个工作进程

$ while jerbs work.db take $$ | read JOB; do echo $JOB; done

现在开始更多吧!

典型用法

我创建这个是为了能够在每个 panes 中都有工作进程的 tmux 中运行,它们都从同一个队列中获取工作。工作进程运行一个使用此实用程序选择下一个工作的 shell 脚本。

一个工作负载是一个数据块。数据块中的内容由您决定。如果一个工作需要多个参数,数据块可以是文件名,指示工作数据的位置;或者,您可以直接使用基于分隔符的格式或 jq 或其他方式将数据打包到数据块中。

工作进程 ID 可以是任何 UTF-8 字符串。如果您的工作进程是 bash 脚本,您可以传递 $$ 来使用工作进程的 PID。

由于您的任务的数据块可能包含可能受到字符串插值风险影响的字符,任何需要数据块的系统默认情况下将从标准输入读取它。如果您的数据块是 shell-safe 的,您可以使用 --data 将您的数据块包含在参数中。

与其他替代方案的比较

其他工作窃取调度器(如 GNU Parallel)是框架;它们拥有工作进程,因此您只能通过框架配置工作进程。《jerbs》反转了这种范式:《jerbs》是一个用于从您的 worker 脚本中使用的实用程序。使用《jerbs》,您可以轻松地为工作分配唯一资源,将工作进程绑定到 CPU/NUMA 节点,或动态更改并发作业的数量。最后,工作进程控制着生产手段。

依赖项

~26MB
~492K SLoC