[shell进阶]——shell多线程
关于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进阶]——shell多线程的更多相关文章
- shell脚本的多线程
shell脚本的多线程 #!/bin/bash ###这是个多线程脚本!!!! ..} do { .$i >/dev/null ];then echo "192.168.2.$i 存活 ...
- Shell进阶精品课程
课程链接 Shell精品进阶教程:理解Shell的方方面面 课程目标 系统性的掌握shell相关知识,进阶shell脚本能力,对shell各方面了然于心 适用人群 具备shell基础但想深入.系统性掌 ...
- 自学linux——12.shell进阶
Shell进阶 当把在Windows中写好的脚本传到linux中使用时,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以会多出来\r,在linux中运行脚本时,需执行: sed - ...
- 转:shell 经典, shell 十三问
原文链接:http://blog.csdn.net/freexploit/article/details/626660 我在 CU 的日子并不长,有幸在 shell 版上与大家结缘.除了跟众前辈学 ...
- [拾 得] 一枚迷人的贝壳 SHELL / Linux | shell 脚本初步入门
坚持知识分享,该文章由Alopex编著, 转载请注明源地址: http://www.cnblogs.com/alopex/ 索引: 什么是shell shell的分类 shell脚本的执行方式 ...
- [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)
[.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...
- [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)
[.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...
- [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)
[.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...
- [翻译].NET Shell Extensions - Shell Context Menus---.net 外壳扩展-右键菜单
我自己的前言说明: 本文原作者为 Dave Kerr,原文链接为.NET Shell Extensions - Shell Context Menus:,我是在为了完成最新需求的时候查询资料的时 ...
随机推荐
- Excel2010画动态甘特图
哈哈!你居然真的看简介点进来啦,我也想八一八Henry gantt本人的故事,可是我查了好些资料,一个槽点都没有发现,不过人生经历还是蛮拼的: 此人活了58年,前半生就是一个中规中距的机械工程师&am ...
- solr特点三: defType(查询权重排序)
Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 e ...
- vscode怎样新建项目
首先,vscode本身没有新建项目的选项,所以要先创建一个空的文件夹喔. 然后打开vscode,再在vscode里面打开文件夹,这样才可以创建项目. 选择之前创建的空文件将作为vscode的文 ...
- WIN7 PHP环境 WAMP一键安装
PHP环境自己搭建比较麻烦,需要配置APACHE,PHP,MYSQL,更改一堆.ini文件配置 所以使用一键安装包比较好,省时省力省心. WAMP 是 WIN+APACHE+MYSQL+PHP 一键安 ...
- Neutron FWaaS 原理
理解概念 Firewall as a Service(FWaaS)是 Neutron 的一个高级服务.用户可以用它来创建和管理防火墙,在 subnet 的边界上对 layer 3 和 layer 4 ...
- GO学习笔记 - 用defer来实现try{}finally{}
在Delphi中,try{}finally{}语句非常有用,对于一定要最终执行的语句,我们放到finally,从而保证程序顺利执行!在GO语言中没有try{}finally{}语句,但是GO语言用另外 ...
- 【awk】按小时切割日志
需求: 把日志按日志内容中的小时数做切割 {hostname=ali-beijing-msync-3512} 2017-05-17 23:17:52.694 [info] <0.27292.70 ...
- 总结day6 ---- set集合,基本类型的相互转化,编码,数据类型总结,循环时候不要动列表或者字典,深浅copy
python小数据池,代码块的最详细.深入剖析 一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id ...
- pycharm连接数据库出现时区jdbc问题
unrecognized or represents more than one time zone. You must configure either the server or JDBC dri ...
- sql自查询各种状态数据总和