shell多进程并发数控制

在批量执行任务是,单进程执行速度太慢,使用&不加数量控制,又担心资源占用过多,导致宕机等问题,因此我们需要控制并发进程的数量,保证效率的同时,保证资源占用不会太高。

其中一个解决思路是利用简单的生产者-消费者模型。

以下为范例脚本:

#!/bin/bash

fifo_file=a.pipe

mkfifo $fifo_file #创建任务队列

exec 5<>$fifo_file

rm $fifo_file

process_num=10 #并发任务的数量

function task() #要执行的任务

{

sleep 2

}

#初始化任务队列,向队列里添加process_num个任务额度

for ((i=0;i<process_num;i++))

do

echo "" ;

done >&5

while read line #不断从任务列表中获取任务

do

read -u 5 #从任务队列中获取一个任务,即消费一个额度

{

echo $(echo $line | awk ‘{print $1}‘)

task #执行任务

echo "" >&5 #任务执行完成之后,再产生一个任务额度到任务队列

}&

done < task_list

wait #等待所有子进程执行完毕

exec 5>&- #关闭任务队列

exit 0

注:task_list中内容如下

1 test line

2 test line

3 test line

...

99 test line

原文地址:https://www.cnblogs.com/Reggie/p/12091510.html

时间: 2024-07-31 06:00:06

shell多进程并发数控制的相关文章

Linux Shell多进程并发以及并发数控制

1. 基础知识准备 1.1. linux后台进程 Unix是一个多任务系统,允许多用户同时运行多个程序.shell的元字符&提供了在后台运行不需要键盘输入的程序的方法.输入命令后,其后紧跟&字符,该命令就会被送往到linux后台执行,而终端又可以继续输入下一个命令了. 比如: sh a.sh & sh b.sh & sh c.sh & 这三个命令就会被同时送往linux后台执行,在这个程度上,认为这三个命令并发执行了. 1.2. linux文件描述符 文件描述符(缩

Linux-Shell-使用mkfifo实现多任务并发及并发数控制

默认的情况下,Shell脚本中的命令是串行执行的,必须等到前一条命令执行完后才执行接下来的命令,但是如果我有一大批的的命令需要执行,而且互相又没有影响的情况下(有影响的话就比较复杂了),那么就要使用命令的并发执行了. 如下: #!/bin/bash IPLIST=/home/meta/ipinfo/iplist for i in $(cat ${IPLIST} |grep -viE "^#|备机|ts"|awk '{print $1}') do ssh $i "cd ~/up

Java并发工具类之并发数控制神器Semaphore

Semaphore(信号量)使用来控制通知访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 我们可以这么理解Semaphore,比如一个厕所只有6个坑,同时只能满足6个人上厕所(变态除外),其他人想蹲坑,只能排队等待,如果有人从厕所出来,后面的一个人就可以进去.在这个例子中人就是线程,蹲坑表示线程在执行,离开表示线程执行完毕,而坑的数量就表示Semaphore的个数. 一.Semaphore的应用场景 Semaphore可以用于做流量控制,特别是公用资源有限的应用场景,比如

[Linux]shell多进程并发—详细版

业务背景 schedule.sh脚本负责调度用户轨迹工程脚本的执行,截取部分代码如下: #!/bin/bash source /etc/profile; export userTrackPathCollectHome=/home/pms/bigDataEngine/analysis/script/usertrack/master/pathCollect ############################## # # 流程A # ##############################

Lavavel5.5源代码 - 并发数控制

app('redis')->connection('default')->funnel('key000') // 每个资源最大锁定10秒自动过期,只有60个资源(并发),在3秒内获取不到锁抛出异常 ->releaseAfter(10)->limit(60)->block(3) ->then(function () { // 获取锁成功,执行业务 }, function () { // 获取锁失败 return false; }); <?php namespace

Shell多进程并发

业务背景: 让a.sh和b.sh同时执行,而不是顺序执行 解决方案: s.sh负责调度a.sh和b.sh 代码如下: s.sh #!/bin/bash source /etc/profile; date='2015-05-06' echo 'start s.sh' sh a.sh $date > a.log 2>&1 & sh b.sh $date > b.log 2>&1 & echo 'end s.sh' a.sh #!/bin/bash sou

Tomcat并发数优化,修改service.xml性能调优 增加最大并发连接数

可以在控制台的启动信息里看见,默认状态下没有被打开nio配置,启动时的信息,如下: 2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol init 信息: Initializing Coyote HTTP/1.1 on http-8080 2010-2-1 12:59:40 org.apache.catalina.startup.Catalina load 修改成支持NIO的类型,配置如下: Java代码   <Connector p

在YARN中,如何控制和监控map/reduce的并发数

配置建议: 1.     In MR1, the mapred.tasktracker.map.tasks.maximum and mapred.tasktracker.reduce.tasks.maximum properties dictated how many map and reduce slots each TaskTracker had. These properties no longer exist in YARN. Instead, YARN uses yarn.nodema

信号量 也是同步锁,可用来控制线程的并发数

# 信号量 也是同步锁,可用来控制线程的并发数 import threading, time class MyThread(threading.Thread): def run(self): if semaphore.acquire(): # 同时运行五个线程,acquire()放一个进程进去计数器-1 print(self.name) # 计数器为0时阻塞线程至同步锁定状态,等待release() time.sleep(3) semaphore.release() # release()运行一