美文网首页Linux学习|Gentoo/Arch/FreeBSD我用 Linux
bash下可控任务数的并发执行脚本

bash下可控任务数的并发执行脚本

作者: FSS_Sosei | 来源:发表于2019-09-30 04:01 被阅读0次

大家实现基本有两种方式,管道队列与循环轮询

管道队列有着很低的CPU占用率,所以多数用这种

#!/bin/bash

#下面这段是生成测试用例

function test_cases ()  #一个测试并发用的例子命令

{

rv_rand=$(($RANDOM % 6 + 5))

echo "The current subprocess sleep time is ${rv_rand}s..."

sleep ${rv_rand}

return $(($RANDOM % 2))

}

rv_command_array=()  #要并发的命令每条都放入这个数组

for ((rv_i=0; rv_i<64; ++rv_i))  #比如有64条命令要并发执行

do

rv_command_array[${rv_i}]="test_cases"  #就都先放入rv_command_array数组

done

#生成测试用例段结束

#下面主程序段开始

rv_max_num_of_concurrent_tasks=8  #设最大并发任务数

rv_temp_fifo_file="/tmp/fifo_${$}.tmp"; mkfifo ${rv_temp_fifo_file} #创建一个管道文件

exec {MYFD}<>${rv_temp_fifo_file}  #把“{MYFD}”这系统分配的空闲FD与管道文件绑定

rm -f ${rv_temp_fifo_file}  #删除管道文件

for ((rv_i=0; rv_i<rv_max_num_of_concurrent_tasks; ++rv_i))

do

echo >&${MYFD}  #放入最大并发进程数个“队列空闲”标记(发送空行就可以)

done

rv_command_num=${#rv_command_array[@]}  #获得待执行命令数组的长度

for ((rv_i=0; rv_i<rv_command_num; ++rv_i))  #遍历待执行命令

do

read -u ${MYFD}  #取走一个“队列空闲”标记,从管道队列读取不到标记则阻塞等待

{

${rv_command_array[${rv_i}]} &&  #从rv_command_array取出一条待执行的命令,以后台方式执行

{

echo "Subprocess execution complete."

} ||

{

echo "Subprocess execution error."

}

echo >&${MYFD}  #一条命令执行完成后,才往管道队列放入一个“队列空闲”标记

} &

done

wait  #等待所有后台进程执行完

exec {MYFD}>&-  #关闭之前绑定的文件操作符

#主程序段结束

相关文章

  • bash下可控任务数的并发执行脚本

    大家实现基本有两种方式,管道队列与循环轮询 管道队列有着很低的CPU占用率,所以多数用这种 #!/bin/bash...

  • shell

    生成随机数 !/bin/bash bash脚本调试 •sh –x script这将执行该脚本并显示所有变量的值 •...

  • OS开发多线程篇—NSOperation基本操作

    一、并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同...

  • Python_线程详解

    并行:任务数<=CPU数,多核CPU同时执行多个任务 并发:任务书>=CPU数,单核CPU串行执行多个任务,只是切...

  • python 线程

    描述并发和并行的概念 并发:当前任务数大于cpu核数,通过任务调度算法,实现多个任务一起执行(实际是快速切换执行)...

  • linux /bin/bash^M: bad interpret

    Linux下执行shell脚本时报错:-bash: ./a.sh: /bin/bash^M: bad interp...

  • Fabric部署及Kerberos支持

    深受DevOps模式毒害,天天都少不了干op的活。之前部署一直用bash脚本,后台并发执行各种远程命令,但bash...

  • 【多线程】NSOperation<二>

    (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只...

  • Linux contrab and shell env

    在执行定时任务的时候碰到一个问题,手动执行脚本是成功的,但是定时任务调用脚本却失败.最后发现是在用户目录下bash...

  • 并发编程-线程

    一:并发和并行 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际...

网友评论

    本文标题:bash下可控任务数的并发执行脚本

    本文链接:https://www.haomeiwen.com/subject/egfcpctx.html