shell脚本并发编程
有时候为了提高效率,比如用SHELL CURL数据,这个时候就希望能并发执行,但是默认的情况下,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。
顶(3)
踩(0)
- 最新评论