加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 同步Unix池化进程的简单机制是什么?

发布时间:2020-12-15 21:04:32 所属栏目:安全 来源:网络整理
导读:我需要限制并行执行的进程数.例如,我想执行这个伪命令行: export POOL_PARALLELISM=4for i in `seq 100` ; do pool foo -bar donepool foo -bar # would not complete until the first 100 finished. 因此,尽管排队等待运行的101个foos,但在任何给定时间只
我需要限制并行执行的进程数.例如,我想执行这个伪命令行:

export POOL_PARALLELISM=4
for i in `seq 100` ; do
    pool foo -bar &
done

pool foo -bar # would not complete until the first 100 finished.

因此,尽管排队等待运行的101个foos,但在任何给定时间只有4个运行. pool会fork()/ exit()并将剩余的进程排队直到完成.

使用Unix工具有一个简单的机制吗? at和batch不适用,因为它们通常在分钟的顶部调用以及按顺序执行作业.使用队列不一定是最好的,因为我想要这些同步.

在我编写一个使用信号量和共享内存的C包装器然后调试我肯定会介绍的死锁之前,任何人都可以推荐一个bash / shell或其他工具机制来实现这一点.

解决方法

绝对没有必要自己编写这个工具,有几个不错的选择.

使

make可以很容易地做到这一点,但它确实广泛依赖于文件来驱动这个过程. (如果要对生成输出文件的每个输入文件运行某些操作,这可能很棒.)-j命令行选项将运行指定数量的任务,-l load-average命令行选项将指定在开始新任务之前必须满足的系统负载平均值. (如果你想在后台做一些工作,这可能会很好.不要忘记nice(1)命令,这也可以帮到这里.)

因此,一个快速(和未经测试)的Makefile用于图像转换:

ALL=$(patsubst cimg%.jpg,thumb_cimg%.jpg,$(wildcard *.jpg))

.PHONY: all

all: $(ALL)
        convert $< -resize 100x100 $@

如果你用make运行它,它将一次运行一次.如果你使用make -j8运行,它将运行八个单独的作业.如果你运行make -j,它将启动数百个. (在编译源代码时,我发现核心数量的两倍是一个很好的起点.这样可以在等待磁盘IO请求时为每个处理器做些事情.不同的机器和不同的负载可能会有不同的工作方式.)

xargs的

xargs提供了–max-procs命令行选项.如果并行处理可以基于单个输入流与ascii NUL分离输入命令或新行分离输入命令分开,则这是最好的. (好吧,-d选项允许你选择其他东西,但这两个很常见且很简单.)这给你带来了使用find(1)强大的文件选择语法的好处,而不是像上面的Makefile例子那样编写有趣的表达式,或让您的输入与文件完全无关. (考虑一下你是否有一个程序来计算素数因子中的大型复合数字 – 使得该任务适合制作最好是尴尬.xargs可以很容易地做到.)

前面的示例可能如下所示:

find . -name '*jpg' -print0 | xargs -0 --max-procs 16 -I {} convert {} --resize 100x100 thumb_{}

平行

moreutils包(至少在Ubuntu上可用)提供并行命令.它可以以两种不同的方式运行:在不同的参数上运行指定的命令,或者并行运行不同的命令.前面的示例可能如下所示:

parallel -i -j 16 convert {} -resize 100x100 thumb_{} -- *.jpg

beanstalkd

beanstalkd程序采用完全不同的方法:它为您提供消息总线以提交请求,作业服务器阻止正在输入的作业,执行作业,然后返回等待队列中的新作业.如果要将数据写回发起作业的特定HTTP请求,这可能不是很方便,因为您必须自己提供该机制(可能是beanstalkd服务器上的另一个“管”),但如果最终结果将数据提交到数据库,电子邮件或类似异步的东西,这可能是最容易集成到您现有的应用程序中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读