Unix哲学家,
我在Perl中编写了一些工具,这些工具有一个可以并行运行的部分.我为他们配备了一个-j(工作)选项,如make
和prove
都有because that’s sensible.但是,很快我就因为两个原因对此感到不满.
>我指定–jobs = 2,因为我有两个cpu核心,但我不需要告诉计算机信息它可以自己解决.
>很少运行的工具占cpu的20%以上(I / O负载也很少),更不利用cpu浪费时间.
我进行了更多的修改以添加负载测量,产生额外的工作,同时仍然有“容量”,直到达到负载阈值,这是当工作数保持或多或少不变时,但是在运行过程中的其他过程更高的优先级需要更多的cpu,随着时间的推移,产生的新工作量减少,因此工作量减少.
由于这个责任是工具中重复的代码,我按照nice
et al.的精神将调度方面考虑成一个独立的工具.并行工具现在非常愚蠢,它们只有信号处理程序,通过它们被告知增加或减少作业池,而负载测量和确定何时控制池的智能驻留在调度程序中.
尝试界面的味道(我也想提供合理的默认值,因此可以省略选项):
run-parallel-and-schedule-job-pool \ --cpu-load-threshold=90% \ --disk-load-threshold='300 KiB/s' \ --network-load-threshold='1.2 MiB/s' \ --increase-pool='/bin/kill -USR1 %PID' \ --decrease-pool='/bin/kill -USR2 %PID' \ -- \ parallel-something-master --MOAR-OPTIONS
在我努力进入last 90%之前,请告诉我,我是否复制了别人的工作?这个概念非常明显,所以它似乎应该已经完成了,但是我发现它不是一个单独的责任独立工具,只是作为更大的多用途系统管理员套件的深度集成部分.
奖金问题:我已经知道runN
和parallel
.他们做并行执行,但没有动态调度(niceload
进入那个领域,但是非常原始).如果不符合我的期望,独立工具还不存在,我最好自己扩展runN或者提出反对并行的愿望吗?