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

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

以下为范例脚本:

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. SOJ1711 题解

    题意 给定 \(n\) 个在数轴的区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\). 定义 \(I(x)\) 为所有包含 \([x,x+1]\) 的区间形成的集合,即 ...

  2. windows 批量杀进程

    1 import psutil 2 from subprocess import Popen, PIPE 3 4 process_name ="bsmr.exe,fxclient.exe,F ...

  3. react框架-this指向问题

    主要使用红框中的内容   import React, { Component } from 'react' export default class app extends Component {   ...

  4. error Delete `␍` prettier/prettier 错误解决方案

    问题根源: 罪魁祸首是git的一个配置属性:core.autocrlf 由于历史原因,windows下和linux下的文本文件的换行符不一致. Windows在换行的时候,同时使用了回车符CR(car ...

  5. mac 查看,终止进程

    找到其他 活动监视器 在这里可以查看和cpu占用 杀死有问题的过程: 1.它占用了大量CPU周期或内存, 2.在"活动监视器"中被突出显示为已崩溃, 先单击该过程,点击x可以终止进 ...

  6. Appium自动化测试之键盘操作pressKeyCode()方法(Android特有)

    电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_HOME 按键Home 3 KEYCODE_MENU 菜单键 82 KEYCODE_BACK ...

  7. python3.7 sorted 自定义排序

    from functools import cmp_to_keyls=['9','23','3','56','78']sorted(ls, key=cmp_to_key(lambda x, y: in ...

  8. SQL-建表注释

    ddl 是对表结构的操作 create(创建)命令.alter(修改)命令.drop(删除)dml 是对表数据的操作 insert(插入)命令.update(更新)命令.delete(删除) alte ...

  9. Vue.js + TypeScript 项目构建

    一:全局安装vue/cli  npm install -g @vue/cli安装完成后检查版本vue --version 二:构建项目创建文件 vue create projectName 有的刚开始 ...

  10. List的初始化方式

    在LinkedIn考试考到了,很遗憾没考过,特意记录一下,下次再战!文章不是我写的,看到别人的总结,发在我这里自己看看 在 Java 中几种初始化 List 的方法: 1. List<Strin ...