有关bash shell脚本中实现并发多进程的例子,用bash shell脚本模拟多进程并发操作,通过&、wait和for循环来进行并发操作能显著的提高效率,需要的朋友参考下。
bash shell/ target=_blank class=infotextkey>shell脚本并发多进程操作
用bash shell脚本模拟多进程并发操作,深入学习下bash shell脚本多进程编程方法。
技能点
shell脚本中实现并发操作,需要:
1、for循环
2、&后台运行符
3、wait等待所有子进程结束
思路分析:
通过写一个for循环,控制每次需要批量操作的次数。
然后封装一个方法,方法里进行批量操作,并将此方法用&符号放在后台运行。
每个循环结束前用wait函数,确保当前批量处理操作全部完成。
准备批量执行创建目录操作,目录名称为数字,从1开始到100,每次批量创建20个。
1、无并发时
 
复制代码 代码示例:
#!/bin/bash  
  
#开始时间  
begin=$(date +%s)  
  
#测试根目录  
root_dir="/home/wzy/wzy_scripts/file_scripts/test"  
  
if [ ! -d $root_dir ]; then  
    mkdir -p $root_dir  
fi  
cd $root_dir  
  
  
#循环创建10000个目录  
for ((i=0; i<10000; ))  
do  
    mkdir $i  
    i=$(expr $i + 1)  
done  
  
#结束时间  
end=$(date +%s)  
spend=$(expr $end - $begin)  
echo "花费时间为$spend秒" 
运行时间:

2、bash shell 并发操作
每次并发创建200个目录,因此循环执行50次即可实现创建10000个目录的工作。
 
复制代码 代码示例:
#!/bin/bash  
  
#开始时间  
begin=$(date +%s)  
  
#测试根目录  
root_dir="/home/wzy/wzy_scripts/file_scripts/test"  
  
if [ ! -d $root_dir ]; then  
    mkdir -p $root_dir  
fi  
cd $root_dir  
  
#批量创建目录函数  
function create_dir()  
{  
  
    mkdir $1  
}  
  
#循环创建10000个目录  
count=10000  
rsnum=200  
cishu=$(expr $count / $rsnum)  
  
for ((i=0; i<$cishu;))  
do  
    start_num=$(expr $i * $rsnum + $i)  
    end_num=$(expr $start_num + $rsnum)  
    for j in `seq $start_num $end_num`  
    do  
        create_dir $j &  
    done  
    wait  
    i=$(expr $i + 1)  
done  
  
#结束时间  
end=$(date +%s)  
spend=$(expr $end - $begin)  
echo "花费时间为$spend秒" 
以上代码中,主要是分页处理和&以及wait的使用。
运行时间:

通过&、wait和for循环来进行并发操作能显著的提高效率,分享出来,供各位参考。