关于shell的多线程

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

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

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

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

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

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

1. 新建fifo类型文件

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

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

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

3. 执行任务

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

4. 等待、关闭、退出

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

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多线程脚本

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

[shell进阶]——shell多线程的更多相关文章

  1. shell脚本的多线程

    shell脚本的多线程 #!/bin/bash ###这是个多线程脚本!!!! ..} do { .$i >/dev/null ];then echo "192.168.2.$i 存活 ...

  2. Shell进阶精品课程

    课程链接 Shell精品进阶教程:理解Shell的方方面面 课程目标 系统性的掌握shell相关知识,进阶shell脚本能力,对shell各方面了然于心 适用人群 具备shell基础但想深入.系统性掌 ...

  3. 自学linux——12.shell进阶

    Shell进阶 当把在Windows中写好的脚本传到linux中使用时,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以会多出来\r,在linux中运行脚本时,需执行: sed - ...

  4. 转:shell 经典, shell 十三问

      原文链接:http://blog.csdn.net/freexploit/article/details/626660 我在 CU 的日子并不长,有幸在 shell 版上与大家结缘.除了跟众前辈学 ...

  5. [拾 得] 一枚迷人的贝壳 SHELL / Linux | shell 脚本初步入门

    坚持知识分享,该文章由Alopex编著, 转载请注明源地址: http://www.cnblogs.com/alopex/   索引: 什么是shell shell的分类 shell脚本的执行方式   ...

  6. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  7. [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)

    [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...

  8. [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)

    [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...

  9. [翻译].NET Shell Extensions - Shell Context Menus---.net 外壳扩展-右键菜单

    我自己的前言说明: 本文原作者为    Dave Kerr,原文链接为.NET Shell Extensions - Shell Context Menus:,我是在为了完成最新需求的时候查询资料的时 ...

随机推荐

  1. solrconfig.xml配置详解

    solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置. 可以在tomcat的安装路径下找到这个文件C:\Program File ...

  2. 手动编译安装lamp之php

    转自马哥教育讲课文档 三.编译安装php-5.4.8 1.解决依赖关系: 请配置好yum源(可以是本地系统光盘)后执行如下命令: # yum -y groupinstall "X Softw ...

  3. SQL 从数据库中随机取n条数据

    用NEWID()方法. * ,NEWID() AS random from [toblename] order by random 其中的1可以换成其他任意整数,表示取的数据条数

  4. (C#版本)提升SQlite数据库效率——开启事务,极速插入数据,3秒100万,32秒1000万条数据

    SQLite插入数据效率最快的方式就是:开启事务  +   insert语句  +  关闭事务(提交) 利用事务的互斥性,如果在批量的插入操作前显式地开启一次事务,在插入操作结束后,提交事务,那么所有 ...

  5. JAVA实现长连接(含心跳检测)Demo

    实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的.       如果,长时间未发送维持连接包,服务端程序将断开连接. 客户端:       Client通过持有Sock ...

  6. django系列3.4-- request对象和response对象(未完待续)

    一.request对象 详细信息可以查阅django官方文档 共有五种请求相关的常用值 request.path_info 返回用户访问的url不包括域名 request.method 请求中使用的H ...

  7. python 项目自动生成 requirements.txt 文件

    生成 requirements.txt 文件的目的: 安装 pthon 项目时需要把此项目所有依赖的第三方包安装完成.项目依赖的第三方包统一放到 requirements.txt 文件中即可. 怎么自 ...

  8. ESXi到KVM之v2v迁移

    1.ESXi到KVM之v2v情况说明 (1).配置任务列表: 1)VMwareESXi虚拟平台下linux系统迁移到KVM虚拟平台.2)VMwareESXi虚拟平台下windows系统迁移到KVM虚拟 ...

  9. Android服务重启

    现在有这样的需求,防止自己的app被其他的应用程序(比如qq手机管家)杀死,该怎么实现呢.我们知道app都是运行在进程中的,android是怎样管理这些进程的呢.要想app不被杀死,只要做到进程不被结 ...

  10. 3.2 Multi-Master Replication

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...