当前位置: 主页 > 脚本 > Shell >

Linux shell 实现多线程(4)

时间:2013-04-03 23:31来源:转载 作者:网络 点击:
} done wait # 等待所有的后台子进程结束 exec 6 - # 关闭df6 exit 0 sleep 3s,线程数为15,一共循环50次,所以,此脚本一共的执行时间大约为12秒 即: 153=45, 所以
欢迎大家分享自己的文档,请点击查阅:分享方法,Linux系统运维
如果你喜欢这文章,可以点击文章结尾处百度分享,分享到你的各种社区收藏,或推荐给朋友……


 }  & 
linux <wbr>shell <wbr>实现多线程
linux <wbr>shell <wbr>实现多线程 done
linux <wbr>shell <wbr>实现多线程
linux <wbr>shell <wbr>实现多线程 wait   #  等待所有的后台子进程结束 
linux <wbr>shell <wbr>实现多线程 exec   6 >&-   #  关闭df6 
linux <wbr>shell <wbr>实现多线程 
linux <wbr>shell <wbr>实现多线程
linux <wbr>shell <wbr>实现多线程 exit   0 
linux <wbr>shell <wbr>实现多线程
linux <wbr>shell <wbr>实现多线程
linux <wbr>shell <wbr>实现多线程

 

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

即:
15×3=45, 所以 3 x 3s = 9s
(50-45=5)<15, 所以 1 x 3s = 3s
所以 9s + 3s = 12s

$ time ./multithread.sh >/dev/null

real        0m12.025s
user        0m0.020s
sys         0m0.064s

而当不使用多线程技巧的时候,执行时间为:50 x 3s = 150s。

此程序中的命令

linux <wbr>shell <wbr>实现多线程mkfifo tmpfile

和linux中的命令

linux <wbr>shell <wbr>实现多线程mknod tmpfile p

效果相同。区别是mkfifo为POSIX标准,因此推荐使用它。该命令创建了一个先入先出的管道文件,并为其分配文件标志符6。管道文件是进程之 间通信的一种方式,注意这一句很重要

linux <wbr>shell <wbr>实现多线程exec   6 <> $tmp_fifofile        #  将fd6指向fifo类型

如果没有这句,在向文件$tmp_fifofile或者 &6写入数据时,程序会被阻塞,直到有read读出了管道文件中的数据为止。而执行了上面这一句后就可以在程序运行期间 不断向fifo类 型的文件写入数据而不会阻塞,并且数据会被保存下来以供read程序读出。

转载请注明linux系统运维
http://www.linuxyw.com/linux/Shell/Shell/20130403/16.html

------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片