背景
在 shell 中,for 循环默认是串行执行的,这样一个一个执行会很慢。可否指定并发数来并发执行呢?
方法
使用 linux 的 mkfifo,借助管道自带的阻塞机制来实现 shell 的并发。
详情见下面的参考链接
实例
示例:使用 3 个并发,打印出 0-9 10 个数字,并且打印完之后会 sleep 1 秒.
#!/bin/sh
# 用户可定义的常量, 3个并发
THREAD=3
# 不需要改变的常量
TMPFILE=$$.fifo
# 公共代码开始
mkfifo ${TMPFILE}
exec 7<>${TMPFILE}
rm -f ${TMPFILE}
for (( i = 0; i < ${THREAD}; i++ ))
do
echo >&7
done
# 业务代码开始
function fun(){
echo $i
sleep 1
}
for(( i = 0; i < 10; i++ ))
do
read -u7
{
fun
echo >&7
} &
done
wait
# 关闭通道
exec 7>&-
echo "finished"
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于