#!/bin/bash
#by inmoonlight@163.com #下面的代码控制并发数。其实是利用令牌原理实现
#一个线程要运行,首先要拿到令牌在该代码中即read一行数据,读取不到就会暂停,否则就拿到数据就运行命令,当完成后将令牌放回
#将令牌放回即再在管道文件中写入一行数据,这里的数据是换行符,echo >&4。这样另外的线程就可以再读该数据(拿到令牌)并运行 #!/bin/bash
tmpf=$0.fifo       #命名管道
mkfifo $tmpf       #创建管道
exec 4<>$tmpf      #创建文件描述符4,以读写方式操作管道
rm $tmpf        #删除创建的管道 thred=4         #指定并发数
seq=(1 2 3 4 5 6 7 8 9 21 22 23 24 25 31 32 33 34 35)     #创建线程的任务列表 #为并发线程创建相应个数的占位
{
  for (( i = 1;i<=${thred};i++ ))
  do
    echo;             #因read命令读取一行,而echo默认输出换行符,所以为每个线程输出占位换行
  done
} >&4                 #将占位写入管道(输出给文件描述符4 --> &4 的作用,如果不加 "&" 会被bash解释为文件名) for id in ${seq[*]}           #从任务列表"seq"按顺序获取任务,或:for id in ${seq}
do
  read                     #读取一行,即fd4中的一个占位符
  (./command ${id}; echo >&4 ) &      #在后台执行任务command并将任务${id}赋予当前任务command;执行完成后在fd4中写入一个换行占位 ,"&" 即将其之前部分放入后台实现并行执行
done <&4         #指定fd4为整个for的stdin(读取fd4的占位信息) wait            #阻塞等待所有在此脚本中的后台任务:"{.....}&" 完成
exec 4>&-        #关闭管道 #以上流程中read、echo对fd4的交替写和读是并发处理的关键!,可以想象若read读取不到fd4中数据时将等待fd4

https://www.cnblogs.com/bluevitality/p/6524147.html

Shell脚本实现模拟并发及并发数控制的更多相关文章

  1. shell脚本,计算输入给定的数,判断最大值,最小值,总和?

    [root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...

  2. Shell脚本中的并发(转)

    转自http://blog.csdn.net/wangtaoking1/article/details/9838571 主要记录一下Shell脚本中的命令的并发和串行执行. 默认的情况下,Shell脚 ...

  3. 【Linux脚本学习案例】shell脚本多通道并发执行存储过程

    使用shell脚本开启多个子任务并发调用存储过程,存储过程按照通道处理数据,提高效率: 外层调用脚本: #!/bin/sh #------------------------------------- ...

  4. Android随笔之——用shell脚本模拟用户按键、触摸操作

    之前写过两篇关于Android中模拟用户操作的博客(其实用一篇是转载的),现在就来讲讲用shell脚本来模拟用户按键操作.本次的目标是用shell脚本打开微信并在其搜索框中搜索相关内容. 本文的模拟功 ...

  5. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  6. shell脚本统计多个CPU利用率

    本节主要内容:top命令统计CPU的利用率 一,问题分析 MySQL在Linux下是多线程的,而且只能将多个线程分布到一个CPU上.因此,使用小型服务器,或者PC SERVER,多个CPU利用率并不高 ...

  7. Linux下模拟多线程的并发并发shell脚本

    分享一个在Linux下模拟多线程的并发脚本,使用这个脚本可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常多,在管理大批服务器时非常的实用.  ...

  8. Shell 脚本进程并发&进程数控制

    Shell 都以串行的方式自上而下执行命令,不适用需要大量作业的场景. 学习此篇shell脚本进程并发,能够大大提高工作效率~ 通过wait 和 & 后台符号 可以实现并行,但无法控制进程数. ...

  9. Shell脚本并发及并发数的控制

    https://www.jianshu.com/p/701952ffb755 正常情况下,Shell脚本是串行执行的,一条命令执行完才会执行接下来的命令.如下代码: # !/bin/bash for ...

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

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

随机推荐

  1. python manage.py loaddata dumpdata 用于导出和导入数据库中的数据

    1.数据导出python  manage.py  dumpdata python manage.py dumpdata [appname] > appname_data.json 指定appna ...

  2. vue provide inject 方法

    上级组件: provide() { return { changeSelectOptions: this.changeSelectOptions, switchTabs: () => this. ...

  3. 集群笔记-fence

    fence机制: 隔离主机到存储的连接 配置fence_xvm步骤 KVM fence 请问物理机器需要真实的fence 设备吗? 否 一.将物理机器(宿主机)f0配置成fence设备 1. 安装fe ...

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

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

  5. CSS3-animation实现走马灯效果

    动画animation 1.先定义动画: @keyframes 动画名称( from{} to{} ) 或者 @keyframes 动画名称( 0%{} 50%{} 100%{} ) 百分号指的是动画 ...

  6. java面经学习002

    2. Java都有哪些map,分别怎么实现的,具体讲 3. 除了LinkedHashMap,你还知道哪些有序map 4. ConcurrentHashMap讲一讲 5. 为什么要有线程池 6. 线程池 ...

  7. zk api连接超时问题 org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for

    遇到 org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss fo ...

  8. 使用 GIT Bash Here 打tar包文件

    1.进入要被  打包的文件目录下 2.点击  Git Bash Here  ---> tar cvf server.tar server/ ok!!!!!!

  9. CVPixelBufferRef

    在iOS里,我们经常能看到 CVPixelBufferRef 这个类型,在Camera 采集返回的数据里得到一个CMSampleBufferRef,而每个CMSampleBufferRef里则包含一个 ...

  10. delete、truncate、drop的区别

    delete:只删除数据,不删除结构.删除的数据存储在系统回滚段中,可以回滚.不会自动提交事务. 在InnoDB中,delete不会真的把数据删除,mysql实际上只是给删除的数据打了个标记为已删除, ...