并发进程
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(先来先服务)策略