当前位置: > shell编程 >

shell并发编程

时间:2016-12-27 14:39来源:blog.csdn.net 作者:wangtaoking1

前言

默认的情况下,shell脚本中的命令是串行执行的,必须等到前一条命令执行完后才执行下一条命令,但是如果我有一大批的的命令需要执行,而且互相又没有影响的情况下(有影响的话就比较复杂了),那么可以考虑使用命令的并发执行。

串行执行

#!/bin/bash

count=10
for(( i = 0; i < ${count}; i++ ))
do
        commands1
done

commands2

对于以上代码,如果commands1每次执行需要耗时20秒,commands2执行需要耗时5秒,那么整个脚本需要花的时间就是 20 * 10 + 5 = 205秒了。这时候就会想,如果commands1可以并发执行的话那该多好,这样就可以节省大量的时间了。

并发执行

#!/bin/bash

count=10
for(( i = 0; i < ${count}; i++ ))
do
{
        commands1
}&
done

commands2

这样的话commands1就可以并行执行了,实质是将commands1作为后台进程执行,这样主进程就不用等待前面的命令执行完毕之后才开始执行下一条命令。

但是我的本来目的是让commands1的这个循环都执行结束后,再用commands2去处理前面的结果。如果像上面这样写的话,在commands1都还没结束时就已经开始执行commands2了,就会得到错误的结果。

再次修改代码如下:

#!/bin/bash

count=10
for(( i = 0; i < ${count}; i++ ))
do
{
        commands1
}&
done
wait

commands2

上面这样就可以达到预期的目的了,先是所有的commands1在后台并行执行,等到命令都结束之后才执行接下来的commands2。

本文转载自:http://blog.csdn.net/wangtaoking1/article/details/9838571,内容有修改。

 

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容