正常执行
shell脚本中命令正常执行顺序是从上到下
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
commands1
done
commands2
并发执行
多线程使命令并发执行,减少等待时间,使用wait作用等待所有在此shell脚本中启动的后台任务完成
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
{
commands1
}&
done
# 等待所有在此shell脚本中启动的后台任务完成
wait
commands2
控制并发数量
count值特别大的时候,我们应该控制并发进程的个数,否则会影响系统其他进程的运行,甚至造成死机。
#!/bin/bash
#最大并发数
Thread_num=5
#命名管道文件
Tmp_fifo=/tmp/$$.fifo
#创建命名管道文件
mkfifo $Tmp_fifo
#用文件句柄(随便给个6)打开管道文件
exec 6<> $Tmp_fifo
rm -f $Tmp_fifo
##控制并发数
for i in `seq $Thread_num`
do
#向管道中放入最大并发数个行,供下面read读取
echo >&6
done
for i in {1..254}
do
#通过文件句柄读取行,当行取尽时,停止下一步(并发)
read -u 6
{
#业务代码
echo "$i"
sleep 1
#一个并发执行后要想管道中在加入一个空行,供下次使用
echo >&6
}&
done
wait
echo "END"
同一脚本控制两个不同的并发数量
#!/bin/bash
#最大并发数
Thread_num1=50
Thread_num2=5
#命名管道文件
Tmp_fifo=/tmp/$$.fifo
#创建命名管道文件
mkfifo $Tmp_fifo
#用文件句柄(随便给个6)打开管道文件
exec 6<> $Tmp_fifo
rm -f $Tmp_fifo
##控制并发数
for i in `seq $Thread_num1`
do
#向管道中放入最大并发数个行,供下面read读取
echo >&6
done
mkfifo $Tmp_fifo
#用文件句柄(随便给个7)打开管道文件
exec 7<> $Tmp_fifo
rm -f $Tmp_fifo
for i in `seq $Thread_num2`
do
echo >&7
done
for i in {1..254}
do
#通过文件句柄读取行,当行取尽时,停止下一步(并发)
read -u 6
{
#业务代码
echo "thread1 $i"
sleep 1
#一个并发执行后要想管道中在加入一个空行,供下次使用
echo >&6
}&
done
wait
for i in {1..254}
do
#通过文件句柄读取行,当行取尽时,停止下一步(并发)
read -u 7
{
#业务代码
echo "thread2 $i"
sleep 1
#一个并发执行后要想管道中在加入一个空行,供下次使用
echo >&7
}&
done
wait
echo "END"