【前言】
shell中并没有真正的多线程,我们这里讲的多线程,实际上是多进程,即最大化地使用cpu。
【正文】
1. 初级版
在linux或shell中,&一般放在某条命令的末尾,可以把该条命令放到一个后台进程去处理。 比如:
ls &
这个时候,我们应该可以想到一种多线程的实现方式。 那就是,循环。
for item in xxx
do
耗时操作 &
done
wait
这里,wait的作用就是等到所有的后台进程执行完毕,才会执行后面的命令。 这时候,出现一个新的问题。 我们每循环一次就会打开一个后台进程,循环次数少的时候尚可,循环次数多了怎么办? 后台进程开的太多,我们的系统难免会崩溃,那么我们如何限制后台进程开启的数量呢?
2. 进阶版
对于上面的问题,我们很容易想到一种解决方法。 那就是,两层循环。
threads=20
for item in xxx
do
for((i=0;i<$threads;i++))
do
耗时操作 &
done
wait
done
这个方法,其实也是有点问题的。 如果,我们同时开了20个后台进程,其中有一个跑