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

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

以下为范例脚本:

span { font-family: "Courier New"; font-size: 10pt; color: rgba(0, 0, 0, 1) }
.sc0 { }
.sc2 { color: rgba(0, 128, 0, 1) }
.sc3 { color: rgba(255, 0, 0, 1) }
.sc4 { font-weight: bold; color: rgba(0, 0, 255, 1) }
.sc5 { color: rgba(128, 128, 128, 1) }
.sc7 { font-weight: bold; color: rgba(128, 64, 0, 1) }
.sc8 { }
.sc9 { font-weight: bold; color: rgba(255, 128, 64, 1); background: rgba(255, 255, 217, 1) }
.sc11 { font-weight: bold; color: rgba(128, 64, 64, 1); background: rgba(225, 255, 243, 1) }

#!/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

span { font-family: "Courier New"; font-size: 10pt; color: rgba(0, 0, 0, 1) }
.sc0 { }
.sc2 { color: rgba(0, 128, 0, 1) }
.sc3 { color: rgba(255, 0, 0, 1) }
.sc4 { font-weight: bold; color: rgba(0, 0, 255, 1) }
.sc5 { color: rgba(128, 128, 128, 1) }
.sc7 { font-weight: bold; color: rgba(128, 64, 0, 1) }
.sc8 { }
.sc9 { font-weight: bold; color: rgba(255, 128, 64, 1); background: rgba(255, 255, 217, 1) }
.sc11 { font-weight: bold; color: rgba(128, 64, 64, 1); background: rgba(225, 255, 243, 1) }
span { font-family: "Courier New"; font-size: 10pt; color: rgba(0, 0, 0, 1) }
.sc0 { }
.sc2 { color: rgba(0, 128, 0, 1) }
.sc3 { color: rgba(255, 0, 0, 1) }
.sc4 { font-weight: bold; color: rgba(0, 0, 255, 1) }
.sc5 { color: rgba(128, 128, 128, 1) }
.sc7 { font-weight: bold; color: rgba(128, 64, 0, 1) }
.sc8 { }
.sc9 { font-weight: bold; color: rgba(255, 128, 64, 1); background: rgba(255, 255, 217, 1) }
.sc11 { font-weight: bold; color: rgba(128, 64, 64, 1); background: rgba(225, 255, 243, 1) }

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

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

    1. 基础知识准备 1.1. linux后台进程 Unix是一个多任务系统,允许多用户同时运行多个程序.shell的元字符&提供了在后台运行不需要键盘输入的程序的方法.输入命令后,其后紧跟&a ...

  2. 分享项目中在用的asp.net下载业务的服务端基类(支持客户端显示下载百分比进度,支持并发数控制,支持限速)

    /// <summary> /// 功能简介:asp.net的下载业务的服务端基类(支持客户端显示下载百分比进度,支持并发数控制,支持限速) /// 创建时间:2015-11-20 /// ...

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

    Semaphore(信号量)使用来控制通知访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 我们可以这么理解Semaphore,比如一个厕所只有6个坑,同时只能满足6个人上厕所( ...

  4. GO瞬间并发数控制

    var wg2 sync.WaitGroup wg2.Add(nums) xc :=0 parallelNum := plt.MaxParallel var waitCount int32 = 0 f ...

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

    以下为代码实现的一个模拟场景:3个生产者,在不断提供服务,处理需求,假设1s处理一个. 20个消费者,在不断消耗供给产品,提交需求,假设3s消耗一个. 情景分析:由于消费者的提交需求能力 和 生产者处 ...

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

    app('redis')->connection('default')->funnel('key000') // 每个资源最大锁定10秒自动过期,只有60个资源(并发),在3秒内获取不到锁 ...

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

    可以在控制台的启动信息里看见,默认状态下没有被打开nio配置,启动时的信息,如下: 2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol ...

  8. 利用apache限制IP并发数和下载流量控制

    一,为什么要对IP并发数,下载流量进行控制 说正题之前,先给大家讲个故事,那是在2007年,我进了一家公司,当时我们正在给达芙妮做电子商务网,www.idaphne.com.从三月份开始做的吧,九月份 ...

  9. curl命令,curl实现post,curl监控网页shell脚本,curl多进程实现并控制进程数,

    cURL > Docs > Tutorial:  http://curl.haxx.se/docs/httpscripting.html 下载单个文件,默认将输出打印到标准输出中(STDO ...

  10. dubbo是如何控制并发数和限流的?

    ExecuteLimitFilter ExecuteLimitFilter ,在服务提供者,通过 的 "executes" 统一配置项开启: 表示每服务的每方法最大可并行执行请求数 ...

随机推荐

  1. D2-Net: Weakly-Supervised Action Localization via Discriminative Embeddings and Denoised Activations概述

    1.针对的问题 目前大多数弱监督动作定位方法通常依赖于分离前景和背景区域(前-背景分离)学习TCAMs,但是在弱监督设置下,学习到的TCAM会存在噪声,而这些方法并没有明确地处理其噪声输出. 2.主要 ...

  2. 理解函数调用_使用argument参数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Win10服务主机本地系统磁盘占用过高解决

    前言:发现电脑卡,磁盘被本地系统占用好多.把尝试过的方法都发一下. 1.尝试用了网上的关闭家庭组: win+R打开运行输入:services.msc  打开Windows服务管理器.找到HomeGro ...

  4. docker (mysql 8.+ )主从同步

    1.环境centos7.5  docker 2.下载docker 版本的mysql 启动容器 docker run --name mysql_master -p 3306:3306 -e MYSQL_ ...

  5. github进不去

    发现github进不去了:百度解决方案:修改hosts表,文件位置在C:\Windows\System32\drivers\etc 记事本打开,尝试在最后添加140.82.112.4 github.c ...

  6. RabbitMQ消息堆积问题?

    原因: 有时可能因为消费者自身代码问题,导致没办法正常消费消息,那么就会导致消息队列中会堆积大量的消息: 或因为同一时间来了非常多的消息,消费者没办法及时消费,导致消息队列中堆积了大量消息. 解决办法 ...

  7. 策略模式demo

    /** StrategyContext. */ public class StrategyContext { private Strategy strategy; // 传入的是Strategy的实现 ...

  8. 08 学生课程分数的Spark SQL分析

    读学生课程分数文件chapter4-data01.txt,创建DataFrame. 用DataFrame的操作或SQL语句完成以下数据分析要求,并和用RDD操作的实现进行对比: 每个分数+5分. 总共 ...

  9. SQL-while begin end

    declare @i int set @i=1 while @i<=10000000begin insert into dbo.Persons (Age,Sex,Grade,Name) valu ...

  10. WinCC插件制作教程

    目录 插件的编写 插件的使用 参考资料 Creation of .NET Controls 109759944_Prepare.NetControls_DOC_en.pdf 插件的编写 创建插件项目, ...