shell编程笔记3--shell并发

2023-11-14

shell编程笔记3–shell并发

介绍

在shell中适当使用并发功能可以提高任务执行的效率,例如:for循环拷贝100台机器上的小文件,若能使用并发则可以提高近100倍效率。为了适当提高shell的并发效率,笔者总结了2种常见的shell并发方式,分别为:简单后台方式,普通控制并发量方式,通过管道控制并发量方式。

并发方法

1. 简单后台方式

  1. 实现方法
    function test_scp(){
        echo 'test_scp!'
        abspath=$(cd "$(dirname "$0")"; pwd)
        filename=$abspath'/'$1/$1'_on.log'
        pathname1=$abspath'/'$1'/netstat'
        pathname2=$abspath'/'$1'/netstat_all'
        pathname3=$abspath'/'$1'/iptables'
        if [ ! -d $pathname1 ];then
            mkdir $pathname1
        fi
        if [ ! -d $pathname2 ];then
            mkdir $pathname2
        fi
        if [ ! -d $pathname3 ];then
            mkdir $pathname3
        fi
    
        iplist=$(cat $filename|tr -d '\r')
        for i in $iplist
        do
        {
            scp $i:~/netstat.log $pathname1/$i'_netstat.log'
            scp $i:~/netstat-all.log $pathname2/$i'_all_netstat.log'
            scp $i:~/file/backup/iptables/iptables.save $pathname3/$i'_iptables.save'
        }&
        done
    }
    project='projectName'
    test_scp $project
    
    该方法在for的do done之间增加了{}&,该方式将scp分别放到后台处理,对于这类资源消耗少的小作业可以提高x倍效率; 其中 $1_on.log即为可访问的ip,按行存放到xx_on.log中.
  2. 优点
    简单, 比较适用于耗资源少的任务.
  3. 缺点
    当shell命令消耗很多内存时候,容易导致机器挂掉或者异常.

2. 普通控制并发量方式

  1. 实现方法
    可以在循环中套循环,并配合wait实现并发量控制,如下使用5个并发量执行程序,案例如下:
    shell脚本:
    #!/bin/bash
    i=1
    while ((i<=20))
    do
        echo 'i='$i
        for ((j=1; j<=5; j++))
        do
        {
           	python test.py
        }&
     	   ((i++))
        done
        wait
    done
    echo $i
    
    python脚本:
    #!/usr/bin/python 
    
    import os
    import time
    import random
    
    rm = random.randint(1,10)
    time.sleep(rm)
    print("pid="+str(os.getpid())+",rand="+str(rm))
    
    输出结果如下:
    $ bash test_muti.sh 
    i=1
    pid=31171,rand=3
    pid=31177,rand=3
    pid=31178,rand=8
    pid=31176,rand=10
    pid=31174,rand=10
    i=6
    pid=31194,rand=1
    pid=31195,rand=2
    pid=31191,rand=5
    pid=31193,rand=7
    pid=31192,rand=8
    i=11
    pid=31205,rand=3
    pid=31200,rand=5
    pid=31204,rand=8
    pid=31202,rand=9
    pid=31203,rand=10
    i=16
    pid=31215,rand=2
    pid=31214,rand=2
    pid=31211,rand=7
    pid=31216,rand=7
    pid=31209,rand=9
    21
    
  2. 优点
    简单,每次需要等wait上面的5个进程执行完。
  3. 缺点
    没有时刻保持4-5个进程同时运行,每次需要5个进程全部执行完了才会进行下一轮并发。

3. 通过管道控制并发量

待补充…

参考文献

1. 如何用shell脚本并行多个命令
2. Linux Shell多进程并发以及并发数控制

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell编程笔记3--shell并发 的相关文章

  • 源码分析【ReentrantLock】原理

    ReentrackLock底层原理 ReentrackLock介绍 非公平锁VS公平 非公平锁 公平锁 可打断VS不可打断 不可打断 默认 可打断模式 锁超时 条件变量 如何在synchronized和ReentrantLock之间进行选择
  • 一次线上的GC问题排查

    6 19号下午 线上系统出现了一次实时链路数据 不通畅的问题 业务方反应更新的增量数据没有流入到HA3搜索集群 登录机器后检查日志后发现 在周六晚上到周天下午 cr search merge 机器人schema统一 表增量数据猛增 初步估计
  • JUC三连问

    1 进程和线程的区别 1 进程是资源分配的基本单位 线程是程序执行的最小单位 2 一个进程包括多个线程 3 每个进程都有自己的内存和资源 一个进程中的线程会共享这些内存和资源 每个线程都有单独的栈内存 和寄存器 2 并行和并发的区别 并行指
  • JUC常用到的类

    JUC java util concurrent 并发包中包含了许多并发编程中需要用到的类 锁 如ReentratLock ReadWriteLock ReentrantLock重入锁 可以替代synchronized使用 并且有更多强大的
  • 并发编程(线程)面试题总结2022

    目录 并发编程三要素是什么 在 Java 程序中怎么保证 多线程 的运行安全 什么是多线程 多线程的优劣 形成死锁的四个必要条件是什么 创建线程有哪几种方式 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口
  • C++ std::thread多线程详解

    c 多线程详解 一 std thread线程创建 1 函数指针 2 Lambda函数 3 functor Funciton Object 4 非静态成员函数 5 静态成员函数 二 std thread线程停止 1 join函数 2 deta
  • 上下文切换理解以及减少方法

    并发编程面临着上下文切换 死锁等问题 尤其在少量数据的情况下 并发可能因为线程的创建和上下文切换的开销等问题 甚至比串行执行的速度更慢 文章目录 上下文切换定义 例子理解 减少上下文切换的方法 无锁并发编程 CAS算法 使用最少线程 协程
  • synchronized与(ReentrantLock)Lock的对比区别

    类别 synchronized Lock 存在层次 Java关键字 属于原生语法层面 需要jvm实现 而Lock它是JDK 1 5之后提供的API层面的互斥锁 需要lock 和unlock 方法配合try finally语句块来完成 锁的释
  • JUC常用到的类

    JUC java util concurrent 并发包中包含了许多并发编程中需要用到的类 锁 如ReentratLock ReadWriteLock ReentrantLock重入锁 可以替代synchronized使用 并且有更多强大的
  • ubuntu小技巧24--快速入门ffmpeg

    ubuntu小技巧24 快速入门ffmpeg 1 介绍 2 使用方法 2 1 ffmpeg命令剪辑音视频文件 2 2 python脚本剪辑音视频文件 3 注意事项 4 说明 1 介绍 FFmpeg是一套可以用来记录 转换数字音频 视频 并能
  • Java并发之锁

    Java并发之锁 一 临界区 二 线程安全 三 解决临界区线程安全问题 四 Java对象头 五 重量级锁 Monitor 5 1 synchronized 5 1 1 synchronized加锁流程 六 轻量级锁 6 1 轻量级锁加锁流程
  • BlockingQueue、ArrayBlockingQueue、LinkedBlockingQueue原理分析

    阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于 当队列是空的时 从队列中获取元素的操作将会被阻塞 或者当队列是满时 往队列里添加元素的操作会被阻塞 试图从空的阻塞队列中获取元素的线程将会被阻塞 直到其他的线程往空的队列插入新的元素 同样
  • Sentinel客户端调用并发控制

    前言 当链路中某个应用出现不稳定 导致整个链路调用变慢 如果不加控制可能导致雪崩 这种情况如何处理呢 一 慢调用现象分析 在分布式链路中调用中 调用关系如下 methodA1与methodA2在同一个应用中 链路标号 调用链 链路1 met
  • Java并发编程实战——并发容器之ConcurrentHashMap(JDK 1.8版本)

    文章目录 ConcurrentHashmap简介 从关键属性及类上来看ConcurrentHashMap的结构 put 方法管中窥豹 CAS关键操作 ConcurrentHashmap简介 在使用HashMap时在多线程情况下扩容会出现CP
  • 并发编程系列之CountDownLatch对战Cyclicbarrier

    前言 前面我们介绍了并发容器和队列 今天我们来介绍几个非常有用的并发工具类 今天主要讲CountDownLatch和Cyclicbarrier这两个工具类 通过讲解并对比两个类的区别 OK 让我们开始今天的并发之旅吧 什么是CountDow
  • Shell函数和脚本参数

    1 在脚本中定义函数 functin name 直接的定义方式 语句块 function function name 使用关键字 function 定义的方式 语句块 函数命名规则 为了和变量区分 使用小写字母和下划线 以字母开头 不能使用
  • 锁介绍名词解释&&Lock && synchronized

    各种锁名词解释及应用 一 名词解释 1 乐观锁 VS 悲观锁 2 自旋锁 VS 适应性自旋锁 3 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁 4 公平锁 VS 非公平锁 5 可重入锁 VS 非可重入锁 6 独享锁 VS 共享锁 二
  • JUC编程

    1 JUC JUC就是java util concurrent工具包的简称 这是一个处理线程的工具包 JDK 1 5开始出现的 1 传统的synchronized public class Synchronized public stati
  • 死锁产生条件和解决办法

    死锁 死锁产生的四个条件 产生死锁必须同时满足以下四个条件 只要其中任一条件不成立 死锁就不会发生 互斥条件 线程要求对所分配的资源 如打印机 进行排他性控制 即在一段时间内某资源仅为一个线程所占有 此时若有其他线程请求该资源 则请求线程只
  • Java线程(Thread)生命周期的6种状态

    当线程被创建并启动以后 它既不是一启动就进入了执行状态 也不是一直处于执行状态 在线程的生命周期中 可能处于不同的状态 java lang Thread State 列举出了这6种线程状态 线程状态 导致状态发生条件 New 新建 线程刚被

随机推荐

  • keil 4单片机程序的debug调试

    1 单击keil4窗口的调试按钮快捷图标 进入到软件模拟调试模式 如图所示 在软件调试模式下 可以设置断点 单步 全速 进入某个函数内部运行 还可以查看变量的变化过程 模拟硬件IO口电平变化 查看代码执行时间等 先了解一下调试按钮的功能 其
  • KMP算法详解(参考代码随想录)

    KMP算法详解 参考代码随想录 KMP的经典思想 当出现字符串不匹配时 可以记录一部分之前已经匹配的文本内容 利用这些信息避免从头再去做匹配 前缀表 前缀表是用来回退的 它记录了模式串与主串 文本串 不匹配的时候 模式串应该从哪里开始重新匹
  • 【每日一学】浮动IP

    在集群或者主备双机场景 对服务使用者而言期望的只有一个IP或域名 这个时候需要的就是浮动IP 一 主备实现 利用单个网卡绑定多个ip地址的技术和crontab自动执行技术 为主机的网卡多绑定一个静态ip 如124 158 26 32 这个地
  • MySQL锁定状态查看相关命令

    1 SHOW PROCESSLIST 显示哪些线程正在运行 只列出前100条 SHOW FULL PROCESSLIST 列出所有线程信息 如果您有SUPER权限 您可以看到所有线程 否则 您只能看到您自己的线程 也就是 与您正在使用的My
  • SpringBoot项目在logback.xml中读取配置中的日志路径问题

    一 问题 在SpringBoot项目 使用logback xml中配置日志的存储位置时 读取application properties或application yml中配置的路径 在logback xml中引用如下
  • PCB 经验

    1 CPU或是关键的IC放在PCB的board中间 目的是有足够空间布线 2 CPU和内寸之间走线一般要做等长走线 长度也要考虑是否够绕线 3 时钟芯片尽量靠近CPU 并远离其它敏感信号 4 CPU的复位电路尽量远离时钟以及其它高速信号 5
  • JS 闭包问题

    var result function foo1 var i 0 for i lt 3 i i 1 result i function j return function console log log 111 gt j i foo1 re
  • gtest里面的断言EXPECT_EQ和ASSERT_EQ的区别

    tips 主要用于记录工作中遇到的问题及解决方案 最近刚开始使用gtest 对里面的断言EXPECT EQ和ASSERT EQ的区别有疑惑 故记录下来 以备后续查看 TEST Binary test std string strPath O
  • Proxy error Could not proxy request错误解决

    原因 跨域 解决 package json文件中的scripts调试添加 start node index js server nodemon index js ignore client
  • 1787. 使所有区间的异或结果为零

    1787 使所有区间的异或结果为零 难度困难72 给你一个整数数组 nums 和一个整数 k 区间 left right left lt right 的 异或结果 是对下标位于 left 和 right 包括 left 和 right 之间
  • mysql触发器和存储过程

    mysql触发器和存储过程 什么是触发器 创建触发器 创建触发器的语法 BEGIN END 触发器经典案例 查看触发器 删除触发器 存储过程简介 mysql存储过程的创建 语法 参数 变量 变量赋值 注释 存储过程的管理 什么是触发器 触发
  • Retrofit统一异常处理

    一 杂谈 前一阵子博客备案因为名字问题被驳回了两次也是够了 现在在公司里一直写业务代码 这让本来就不会的算法的我算法水平更加烂 最近在跟着优酷上的一个小姐姐学魔方 智商跟不太上了啊哈哈哈哈哈 OK 步入正题 名字叫Retrofit异常处理
  • 向量点积与叉积等几何的定义及应用研究

    要计算两个向量的点积 需要将两个向量的对应分量相乘 然后再将乘积相加 下面这段代码可以计算出两个二维向量的点积 var dotProduct vectorOne x vectorTwo x vectorOne y vectorTwo y 计
  • 跟我学Java设计模式第4天:结构型模式大全

    5 结构型模式 5 6 组合模式 5 6 1 概述 对于这个图片肯定会非常熟悉 上图我们可以看做是一个文件系统 对于这样的结构我们称之为树形结构 在树形结构中可以通过调用某个方法来遍历整个树 当我们找到某个叶子节点后 就可以对叶子节点进行相
  • linux下进程绑定cpu情况查看

    linux下进程绑定cpu情况查看的几种方法 1 pidstat命令 查看进程使用cpu情况 如果绑定了多个cpu会都显示出来 pidstat p pidof 进程名 t 1 2 top命令 1 top 2 按f键可以选择下面配置选项 P
  • public void doGet(HttpServletRequest request, HttpServletResponse response)

  • 猿如意工具-【SwitchHosts】详情介绍

    一 什么是猿如意 在发表文章的契机下 看到了 猿如意 这个名词 处于好奇 点击进行了解 发现是我们熟悉的CSDN提供的一个面向开发者的辅助开发工具箱 猿如意的意思是 程序猿 员 的如意兵器 它提供效率工具 开发工具的下载 教程文档 代码片段
  • 【Vim】IdeaVim高级玩法之EasyMotion插件

    本文将介绍IDEA中的IdeaVim插件提供的EasyMotion拓展插件 什么是EasyMotion EasyMotion起源是Vim的一个插件 正如它的名字所表明的一样 EasyMotion可以让你在Vim中以更简单的方式移动 一旦熟练
  • gradle7.0.2如何发布jitpack开源项目

    前言 gradle 可以说发展十分迅速 一下子就飙升 7 0 2 了 当你想用 github jitpack 发布自己的开源项目的时候 网上找的教程都是 基于gradle 3 4 版本的 里面还说道要依赖 android maven gra
  • shell编程笔记3--shell并发

    shell编程笔记3 shell并发 shell编程笔记3 shell并发 介绍 并发方法 1 简单后台方式 2 普通控制并发量方式 3 通过管道控制并发量 参考文献 shell编程笔记3 shell并发 介绍 在shell中适当使用并发功