命名管道用于并行执行

mkfifo p_file
创建fifo (first in first out) 文件, 文件出来之后可以看见文件类型是p, 管道文件
prw-r–r– 1 tcaplus users 0 9月 7 17:35 p_file
往这个文件里面写的数据, 每次读一行, 只能从头部读出, 读出之后就删除这一行

我们常用的匿名管道 “|” 是一块内存区域. 使用命名管道的话, 这就是一个文件, 他们两个同样都遵循先入先出的规则. 利用命名管道可以并行执行任务

#!/bin/bash

max_curr_num=3 #最大并行执行数目
mission_num=15 #任务总数
mkfifo p_file  #创建管道文件
exec 6<>p_file #绑定文件描述符
rm -f p_file   #清空管道文件
for ((i=1; i<=$max_curr_num; i++)) #给管道文件写入最大并发数目个换行符
do
    echo  >&6
done

for ((i=1; i<$mission_num; i++))  #执行任务总数次
do
read -u6  #从文件描述符6读入
{
    sleep 1
    echo $i
    echo  >&6  #一个任务完成后, 写入管道文件, 下个任务才能读到并执行
}&  #管道文件有多少行, 就并行多少个任务
done
wait  #等待所有任务完成

exec 6>&-  #释放文件描述符
exit 0
Nproc=20

Pfifo="/tmp/$$.fifo"
mkfifo $Pfifo
exec 6<>$Pfifo
rm -f $Pfifo

for((i=1; i<=$Nproc; i++)); do
    echo
done >&6
filenames=`ls *.txh`

for f in $filenames; do
read -u6
{
import_a_txh $f && {
     echo "$f done"
        } || {
            echo "$f error"
        }
sleep 1
echo >&6
 }&
done
wait
exec 6>&-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值