shell脚本如何实现goto_【shell二三轶事】多线程如何实现?原子操作如何实现?...

本文探讨了在Shell脚本中如何模拟多线程,从初级版的使用&符号后台执行,到进阶版的两层循环限制进程数,再到主流的命名管道(FIFO)控制。此外,还介绍了通过加锁实现原子操作以解决线程安全问题。
摘要由CSDN通过智能技术生成

【前言】

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个后台进程,其中有一个跑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值