并发进程

并发进程

1 程序执行的顺序性

1.1 程序执行顺序性

程序执行的顺序性包括两个定义:程序内部的顺序性和程序外部的顺序性

内部:程序内部的顺序性是指单线程进程执行时呈现程序内部的顺序性

外部:程序外部的顺序性是指多个进程之间的顺序执行关系,这人写进程在时间上按照次序严格有效的执行,完成一个作业级的任务。

2 程序执行的并发性

2.1 程序并发性的含义

进程的并发性是指一组进程在执行时间上是重叠的,即一个进程执行的第一条指令是在另一条指令结束前开始的。

并发的实质是一个处理器在几个进程之间的多路复用

2.2 并发程序设计

把一个程序编制成若干个可同时执行的程序模块的方法

如果这些模块属于同一个进程(说明这个程序是一个单线程,这个单线程通过多个线程分别实现这些模块),在进程内部执行,则称为并发多线程程序设计

如果模块属于不同的进程(说明这个程序是通过多个进程实现不同的功能模块),则称为并发多进程程序设计

2.3 并发进程分类

并发进程之间的关系分为两类:无关的和交互的

无关的并发进程:一组并发进程分别在不同的变量集合上操作

交互的并发进程:一组并发进程共享某些变量

并发进程的无关性是进程的执行与实践无关的一个充分条件,又称为Bernstein条件。相关定义可以参考下方链接。

https://baike.baidu.com/item/Bernstein%E6%9D%A1%E4%BB%B6/5452747?fr=aladdin

大概意思是用这个Bernstein条件用来确定那些进程是可以并发的。

3 与时间有关的错误

对于一组交互并发的进程,若执行的相对速度无法相互控制,则会出现与时间有关的错误,与时间有关的错误有两种表现形式:结果不唯一和永远等待

3.1 结果不唯一

购机票问题,可能会出现同一张票卖给两个乘客的情况,正确的做法是执行购买操作时只能一先一后不能同时执行。

3.2 永远等待

借书还书问题,合作进程之间等待、唤醒之类的同步信号发送次序颠倒时

4 进程的交互

4.1 进程之间的竞争关系

竞争关系时由于并发进程共用一套计算机系统资源引起的

死锁:一组已经获得部分资源的进程等待获得其他进程所占用的资源,最终该组进程陷入死锁僵局

解决方式:进程互斥–若干进程要使用同一共享资源时,最多只允许一个进程使用

饥饿:一个进程由于其他进程总是优于它而被无限期拖延

解决方式:FCFS(先来先服务)策略

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: #!/bin/bash# 设置并发进程的最大数量 MAX_PROCESSES=4# 启动4个后台进程 for i in `seq 1 $MAX_PROCESSES`; do # 在后台运行脚本 ./script.sh & done# 等待所有进程结束 wait ### 回答2: 并发进程是指多个进程同时执行,可以提高系统的效率和资源利用率。要编写一个并发进程的shell脚本,可以使用以下方法: ```shell #!/bin/bash # 并发进程的shell脚本 # 定义并发进程数量 NUM_PROCESSES=3 # 定义要执行的任务函数 task() { echo "开始执行任务 $1" sleep 5 # 模拟任务执行时间 echo "任务 $1 执行完毕" } # 循环创建并发进程进行任务执行 for ((i=1; i<=NUM_PROCESSES; i++)) do task $i & # 后台执行任务函数 done # 等待所有后台任务执行完毕 wait echo "所有任务已执行完毕" ``` 在上述脚本中,首先定义了并发进程的数量为NUM_PROCESSES,可以根据实际情况进行调整。 然后,定义了一个名为task的函数,用于执行具体的任务。在示例中,任务函数会打印出执行的任务编号,然后通过sleep命令模拟任务的执行时间。 接下来,使用循环创建了NUM_PROCESSES个后台进程,每个进程都会调用task函数进行任务执行。 最后,使用wait命令等待所有后台进程执行完毕,然后输出"所有任务已执行完毕"的信息。 使用这个脚本可以实现多个任务的并发执行,提高了系统的效率和资源利用率。 ### 回答3: 并发进程是指多个进程同时执行的情况。在shell脚本中,我们可以利用后台执行和等待命令实现并发进程的效果。 以下是一个简单的示例: 脚本名称:concurrent_processes.sh ```shell #!/bin/bash # 定义并发进程数量 concurrent_count=3 # 循环执行并发进程逻辑 for ((i=1; i<=$concurrent_count; i++)) do { # 执行需要并发的命令 echo "并发进程$i 开始执行" # 假设这里是需要执行的命令,比如:command1、command2等 sleep 5 echo "并发进程$i 执行完毕" } & done # 等待所有并发进程执行完毕 wait # 所有并发进程执行完毕后的逻辑 echo "所有并发进程执行完毕" ``` 说明: 1. 将上述脚本保存为concurrent_processes.sh,并赋予执行权限(chmod +x concurrent_processes.sh)。 2. 脚本中的concurrent_count变量定义了并发进程的数量,这里设置为3。 3. 在for循环中,我们使用了后台执行命令(&),并在大括号内执行需要并发的命令逻辑。这里使用了sleep 5来模拟需要执行的命令。 4. 在循环结束后,使用wait命令等待所有并发进程执行完毕。 5. 最后输出"所有并发进程执行完毕"的提示信息。 执行该脚本后,会同时启动3个并发进程执行相同的逻辑(这里是sleep 5)。待所有进程执行完毕后,输出最终提示信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值