shell 脚本并发数的控制

本贴最后更新于 2244 天前,其中的信息可能已经时异事殊

背景

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

参考

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖 • 2 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...