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

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

以下为范例脚本:

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. tomcat 3 - 默认连接器

    Tomcat 中使用的容器连接器必须满足以下要求: 实现 org.apache.catalina.Connector 接口 负责创建实现了 org.apache.catalina.Request 接口 ...

  2. windows下解决mysql5中文乱码的问题

    1.问题描述:一开始无论是在命令行,还是在mysql的客户端输入中文都会出现 "???" 问题之类的乱码问题: 2.解决办法: 1)cmd 进入mysql ,命令mysql -ur ...

  3. js模块化 CommonJS和AMD/CMD ES6模块化

    ES6之前已经出现了js模块方案,有CommonJS和AMD规范.commonjs实现同步加载应用于服务器,如nodejs.AMD为异步加载应用于浏览器,如requirejs. ES6在语言层面上模块 ...

  4. [2001年NOIP普及组] 求先序排列

    给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入 第一行输入一个字符串表示二叉树的中序排列,第二行输入一个字符串表示二叉树的后序排列. 输 ...

  5. Leetcode本地阅读器开发--01界面设计二

    返回项目声明及目录:Leetcode本地阅读器开发--总声明 继续上一节内容: 1.第一个内容是左边第一行的功能,读取默认路径和修改路径.此路径为本地阅读器的搜索题目的主目录. 为了整个程序都能读取工 ...

  6. es6中箭头函数和this指向

    箭头函数相当于匿名函数,简化了函数定义. 箭头函数有两种写法,当函数体是单条语句的时候可以省略{}和return. 另一种是包含多条语句,不可以省略{}和return. 特点 箭头函数最大的特点就是没 ...

  7. 编译configure常用参数详解

    ./configure常用参数解释: 具体通过–help来查看具体支持什么功能.有时候编译不通过,可能依赖一些库,如果这些库关联的功能我们不需要,可以通过---disable-*lib来取消相关库的编 ...

  8. Linux定时运行Python代码

    背景 之前定时运行py文件都是jenkins设置定时任务运行,今天想linux有没有定时运行的东西,百度一下找到了,链接:http://blog.csdn.net/netdxy/article/det ...

  9. Liunx安装Docker

    1.更新yum包到最新 sudo yum update 2.卸载历史Docker,如果没有安装过,则跳过该步 sudo yum remove docker \ docker-client \ dock ...

  10. Falsk 大文件上传/下载(send_from_directory)

    下载接口: 服务端flask下载接口 @app.route("/api/download/", methods=["POST"]) def download() ...