shell默认是单进程的,可以用任务后台执行的方式实现进程并行。
实现方式:使用&和wait配合实现shell多进程并行
& 进程后台执行
wait 等待前面的后台任务全部完成才往下执行
下面用两个脚本来模拟普通模式和多进程模式
普通模式
#! //bin/bash
startTime_s=`date +%s`
endTime_s=`date +%s`
for i in $(seq 1 5)
do
sleep 10
echo "${i} 进程执行完毕"
done
sumTime=$[ $(date +%s) - $startTime_s ]
echo "Total:$sumTime seconds"
---------------------------------------
结果:
[root@rocket ~]# bash onethread.sh
1 进程执行完毕
2 进程执行完毕
3 进程执行完毕
4 进程执行完毕
5 进程执行完毕
Total:50 seconds
多进程模式
#! //bin/bash
startTime_s=`date +%s`
endTime_s=`date +%s`
for i in $(seq 1 5)
do
{
sleep 10
echo "${i} 进程执行完毕"
}&
done
wait
sumTime=$[ $(date +%s) - $startTime_s ]
echo "Total:$sumTime seconds"
----------------------------------------------
结果:
2 进程执行完毕
1 进程执行完毕
3 进程执行完毕
4 进程执行完毕
5 进程执行完毕
Total:10 seconds
运行过程查看进程调用情况
[root@rocket ~]# pstree |grep bash
|-sshd-+-sshd-+-bash---sleep
| | |-bash-+-grep
| | `-bash---top
| `-sshd-+-bash---sleep
| |-bash---bash---5*[bash---sleep]
| `-bash---top
很明显效率大大提升。