侧边栏壁纸
  • 累计撰写 7 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

shell多线程运行程序

林凡晨
2021-12-29 / 0 评论 / 0 点赞 / 257 阅读 / 351 字
温馨提示:
本文最后更新于 2022-10-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#!/bin/bash

function my_cmd(){
    sleep 1

}
date
tmp_fifofile="/tmp/$$.fifo"
mkfifo $tmp_fifofile      # 新建一个fifo类型的文件
exec 6<>$tmp_fifofile     # 将fd6指向fifo类型
rm $tmp_fifofile    #删也可以

thread_num=5 # 最大可同时执行线程数量

#根据线程总数量设置令牌个数
for ((i=0;i<${thread_num};i++));do
    echo
done >&6
cat /root/shu |while read line;do
    read -u6 
    #一个read -u6命令执行一次,就从fd6减去一个回车符 然后继续向下读取,当fd6没有内容的时候也就停止了。
    #可以把具体的需要执行的命令封装成一个函数
    {        echo "zheshi:$line"
        my_cmd      
        echo >&6 # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
    } &
done
wait
exec 6>&- # 关闭fd6
date
echo "over"

读取文件中的内容:

cat /root/shu
1
2
3
4
5
6
7
8
9
10

最后运行的结果:

这个脚本中如果使用原生的shell脚本去执行需要10秒现在只需1秒。

注意:可能存在数据不是按照顺序出现的,比如上面是正常的 也可能先出现 2 3 1 5 4乱的顺序,是因为线程之间会抢占资源主要是执行命令使用,顺序暂时不考虑。
0

评论区