码迷,mamicode.com
首页 > 编程语言 > 详细

Shell多线程脚本

时间:2016-06-15 16:18:04      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:多线程   shell脚本   并发执行   


<--目录-->

1)多线程概述

2)多线程脚本内容

3)多线程脚本执行时间

4)单线程脚本内容

5)单线程脚本执行时间


【多线程概述】

# 多线程指并发执行任务,而不是一台一台的串行来执行任务,这样可以更快且更高效的利用资源

# 我们来描述一下怎么准确控制并发数目

# 下面例子说明了一种用wait、read命令模拟多线程的一种技术技巧

# 此技巧往往用于多主机检查,比如ssh登陆、ping等等这种单进程比较慢而不耗费CPU的情况

# 还说明了多线程的控制



【多线程脚本内容】

#!/bin/bash

function a_sub {           # 此处定义一个函数,作为一个线程(子进程)

sleep 3            # 线程的作用是睡眠3秒

}

tmp_fifofile="/tmp/$$.fifo" 

mkfifo $tmp_fifofile       # 新建一个fifo类型的文件

exec 6<>$tmp_fifofile      # 将fd6指向fifo类型

rm $tmp_fifofile

thread=5                   # 此处定义线程数,我给他定义了五个线程,一会就是五个并发执行

for ((i=0;i<$thread;i++));do

echo

done >&6                   # 事实上就是在fd6中放置了$thread个回车符

for ((i=0;i<20;i++));do    # 20次循环,可以理解为20个主机,或其他

read -u6          

# 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,

# fd6中没有回车符的时候,就停在这了,从而实现了线程数量控制

{   # 此处子进程开始执行,被放到后台

a_sub && {    # 此处可以用来判断子进程的逻辑

echo "Hellow World"

} || {

echo "Hellow error"

    }

echo >&6    # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个

    } &

done

wait 

exec 6>&-   # 关闭df6

exit 0


【多线程脚本执行时间】

[root@localhost opt]# time sh a.sh 

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World


real    0m12.015s

user    0m0.002s

sys     0m0.017s


分析:

sleep 3s,线程数为5,一共循环20次,所以,此脚本一共的执行时间大约为12秒

所以一次执行五个线程,即五个主机一起执行,一共执行四次

  即:

  5×4=20,               五台主机一共循环四次

    所以 4 x 3s = 12s      一次循环所用三秒时间


【单线程脚本内容】

[root@localhost opt]# cat b.sh 

#!/bin/bash

for((i=0;i<20;i++))

do

        echo "Helloworld!!!"

        sleep 3

done


【单线程脚本执行时间】

[root@localhost opt]# time sh b.sh

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!


real    1m0.041s

user    0m0.008s

sys     0m0.023s


结论:

多线程执行任务完成时间 12s

单线程执行任务完成时间 60s

本文出自 “wsyht的博客” 博客,请务必保留此出处http://wsyht2015.blog.51cto.com/9014030/1789475

Shell多线程脚本

标签:多线程   shell脚本   并发执行   

原文地址:http://wsyht2015.blog.51cto.com/9014030/1789475

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!