shell脚本并发数的控制

  |   0 评论   |   0 浏览

背景

在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"

参考