zoukankan      html  css  js  c++  java
  • [shell进阶]——shell多线程

    关于shell的多线程

    1. 多线程并发执行任务,而不用一台台的串行执行,能更快更高效

    2. Shell并没有多线程的概念,所以:

        * 一般使用wait、read等命令技巧性地模拟多线程实

        * 使用命名管道(fifo)来实现多线程的控制

    3. 用途:需要对多主机批量执行检查或操作时(例如ssh、ping等操作)

    分段解析一个例子来理解一个多线程脚本的书写

    1. 新建fifo类型文件

    tmp_fifofile="/tmp/$$.fifo"
    mkfifo $tmp_fifofile     #新建fifo类型的文件
    exec 5<>$tmp_fifofile    #将fd 5指向fifo类型
    rm $tmp_fifofile         #可删除 
                             #这里的$$.fifo/5都是一个文件名而已,可随意

    2. 定义线程数,循环键入字符,通过字符控制实现线程数量控制

    thread=5                  # $thread 定义的是线程数,thread=5的意思是每次最多同时执行5个线程
    #写一个for循环随便echo个字符在5这个文件中,实际上我们就是通过对这个字符的数量控制来实现对线程数量的控制的
    for ((i=0;i<$thread;i++)) 
    do 
       echo 
    done >&5

    3. 执行任务

    # read -u <fd>命令的意义是:read input from file descriptor fd. 读取来自文件描述符fd的输入
    # 实际上我们是通过“read -u 5”来实现每次从5中减去一个字符,
    
    job_num=20    # $job_num定义了总的任务数
    for ((i=0;i<$job_num;i++))
    do
    read -u5
     
    {
      sleep 3 && echo "Hello World" || echo "Hello error"
      ......                         ===>这些部分就是我们要执行的命令,可封装成函数
      ......
     
    echo >&5      #多加回一个字符
    }&
    done

    4. 等待、关闭、退出

    wait       #等待所有子进程结束
    exec 5>&-  #关闭fd 5
    exit 0     #成功退出

    5. 执行结果

    我们的job_num有20个,thread定义了5个
    即每5个每5个这样执行
    一共需要执行4次(单线程就要执行20次了)
    每次执行是3s,所以共花费3*4=12s
    
    # time sh dxc.sh 
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    Hello World
    
    real    0m12.064s
    user    0m0.020s
    sys     0m0.042s

    参考文章

    使用shell脚本(bash脚本)模拟多线程

    Shell多线程脚本

    阮一峰-进程线程的简单解释

  • 相关阅读:
    Python—Socket
    python-—计算器
    Python—I-O多路复用
    Python—redis
    《Python数据分析常用手册》一、NumPy和Pandas篇
    python--Selenium-模拟浏览器
    python--selenium简单模拟百度搜索点击器
    关于selenium实现滑块验证
    python 读写、创建 文件的方法(必看)
    Python 爬虫的工具列表大全
  • 原文地址:https://www.cnblogs.com/snsdzjlz320/p/7238998.html
Copyright © 2011-2022 走看看