ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

浅尝shell脚本并发

2022-07-03 17:36:57  阅读:171  来源: 互联网

标签:aa shell 浅尝 并发 done 进程 执行


​ 默认情况下,shell脚本中的命令是串行执行的,必须等到前一条命令执行完毕之后才执行接下来的命令,但是如果有一大批的命令需要执行,而且互相之间又没有影响的情况下,可以采用并发执行的方式执行。

​ 正常情况下的shell脚本如下:

#!/bin/bash

for ((i=0;i<5;i++));do
    {
        sleep 3
        echo "hello world" >> aa && echo "done!"
    }
done
cat aa | wc -l
rm aa

使用time命令查看此脚本的执行时间,结果如下:

[root@ali shell]# time sh echo_hello.sh
done!
done!
done!
done!
done!
5

real    0m15.012s		#15s
user    0m0.006s
sys     0m0.006s

可以看到执行耗时为15秒左右。现在改造一下脚本使它并发执行,脚本如下:

#!/bin/bash

for ((i=0;i<5;i++));do
    {
        sleep 3
        echo "hello world" >> aa && echo "done!"
    }&
done
wait
cat aa | wc -l
rm aa

同样,查看执行耗时:

[root@ali shell]# time sh echo_hello.sh
done!
done!
done!
done!
done!
5

real    0m3.011s		#3s
user    0m0.007s
sys     0m0.005s

可以看到,仅消耗了3s。

wait命令有一个很重要的用途就是在shell的并发编程中,可以在shell脚本中启动多个后台进程(使用“&”),然后调用wait命令,等待所有后台进程都运行完毕,shell脚本再继续往下执行。

注意:当多个进程可能会对同样的数据执行操作时,这些进程需要保证其他进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到存在那个文件,则认为有操作同样数据的进程在工作。当然,这么做也有一个弊端,如果进程不小心意外死亡了,都没有清理那个锁文件,那么只能由用户手动来清理了。

Shell多进程并发

​ 如果逻辑控制在时间上是重叠的,那么它们就是并发的,这种常见的现象称为并发,shell多进程并发常出现在计算机系统的不同层面上。

​ 使用应用级并发的应用程序称为并发程序。现代操作系统提供了三种基本的构造并发程序的方法,具体如下:

  1. 进程:若采用这种方法,则每个逻辑控制流都是一个进程,由内核来调度和维护。因为进程有独立的虚拟地址空间,因此要想与其他流进行通信,控制流必须使用进程间通信(IPC)
  2. I/O多路复用:若采用这种形式的并发,则应用程序在一个进程的上下文中显式地调度它们自己的逻辑流。逻辑流被模拟为“状态机”,数据到达文件描述符之后,主程序显式地从一个状态转换到另一个状态。因为程序是一个单独的进程,所以所有的流都共享一个地址空间
  3. 线程:线程是一个运行在单一进程上下文中的逻辑流,由内核进行调度。线程可以看做是进程和I/O多路复用的合体,像进程一样由内核调度,像I/O多路复用一样共享一个虚拟地址空间。

标签:aa,shell,浅尝,并发,done,进程,执行
来源: https://www.cnblogs.com/Torres-tao/p/16440226.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有