shell多进程并发数控制
在批量执行任务是,单进程执行速度太慢,使用&不加数量控制,又担心资源占用过多,导致宕机等问题,因此我们需要控制并发进程的数量,保证效率的同时,保证资源占用不会太高。
其中一个解决思路是利用简单的生产者-消费者模型。
以下为范例脚本:
#!/bin/bash
fifo_file=a.pipe
mkfifo $fifo_file #创建任务队列
exec 5<>$fifo_file
rm $fifo_file
process_num=10 #并发任务的数量
function task() #要执行的任务
{
sleep 2
}
#初始化任务队列,向队列里添加process_num个任务额度
for ((i=0;i<process_num;i++))
do
echo "" ;
done >&5
while read line #不断从任务列表中获取任务
do
read -u 5 #从任务队列中获取一个任务,即消费一个额度
{
echo $(echo $line | awk ‘{print $1}‘)
task #执行任务
echo "" >&5 #任务执行完成之后,再产生一个任务额度到任务队列
}&
done < task_list
wait #等待所有子进程执行完毕
exec 5>&- #关闭任务队列
exit 0
注:task_list中内容如下
1 test line
2 test line
3 test line
...
99 test line
相关推荐
huha 2020-10-16
laisean 2020-11-11
大牛牛 2020-10-30
firefaith 2020-10-30
liguojia 2020-10-20
wangzhaotongalex 2020-10-20
以梦为马不负韶华 2020-10-20
JohnYork 2020-10-16
Julyth 2020-10-16
applecarelte 2020-10-16
laisean 2020-09-27
flycappuccino 2020-09-27
liguojia 2020-09-27
wangzhaotongalex 2020-09-22
流年浅滩 2020-10-23
liujianhua 2020-10-22
woaimeinuo 2020-10-21
tufeiax 2020-09-03
laisean 2020-09-01
vvu 2020-09-16
libao 2020-09-16
Yyqingmofeige 2020-08-18
zhushixia 2020-08-17