一个计算由若干个操作组成,若这些操作必须按照某种先后次序来执行,以保证操作的结果是正确的,则这类计算过程称为程序的顺序执行过程。
所谓的程序的并发执行是指若干个程序同时在系统中运行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。
补充:
顺序程序的特点:
顺序性、封闭性、可再现性。
并发程序的特点:
失去程序的封闭性、程序与计算不再一一对应、程序并发执行时的相互制约关系。
前趋图
前趋图(Precedence Graph)是一个有向无循环图,记为DAG(Directed Acyclic Graph)
前趋图中必须不存在循环
程序顺序执行
顺序性
封闭性:即程序运行时独占全机资源
可再现性程序并发执行
间断性
失去封闭性:是多个程序共享系统中的各种资源
不可再现性
一个计算由若干个操作组成,若这些操作必须按照某种先后次序来执行,以保证操作的结果是正确的,则这类计算过程称为程序的顺序执行过程。
所谓的程序的并发执行是指若干个程序同时在系统中运行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始。
补充:
顺序程序的特点:
顺序性、封闭性、可再现性。
并发程序的特点:
失去程序的封闭性、程序与计算不再一一对应、程序并发执行时的相互制约关系。
转载于:https://www.cnblogs.com/luo841997665/p/4663094.html
顺序编程:
即程序中的所有事物在任意时刻都只能执行一个步骤。在未学习并使用并发编程前,你使用的都是顺序编程。
什么是程序、进程、线程、并发?
程序和进程
程序并不能单独执行(例如需要CPU的调度、寄存器、随机存储存储器RAM等等协助工作),只有将程序加载到内存中,系统为它分配资源后才能执行,这种正在执行的程序叫做进程。进程是系统进行资源分配调度的一个基本单元,每个进程都有自己独立的地址空间。
1 .程序和进程的区别:
程序是指令的集合,是进程运行的静态描述文本。
进程是一个独立的完整的任务。例如:QQ、淘宝、DNF等,这些都是进程。系统会为这些任务分配唯一的端口号以示区分,运行在唯一端口号上的程序就是进程。2. 进程的特点
在顺序编程(单线程)模式下,可能发生进程阻塞(该程序控制范围之外的某些条件,例如I/O、抛异常等等,而导致不能继续向前执行),整个程序都将停止下来,直到外部条件发生变化。但是,如果使用并发编程,那么当一个任务阻塞时,程序中的其他任务还可以继续向前执行,事实上,从性能的角度来看,如果没有任务会阻塞,那么在单处理机上使用并发就没有任务意义,还会造成系统资源的浪费。
线程是进程的一个实体,也是CPU调度和分配的基本单位,他是比进程更小的能独立运行的基本单位,有时又被称为轻权进程或轻量级进程。相对进程而言,线程是一个更加趋近于执行体的概念。进程在执行过程中拥有独立的内存单元,而线程自己基本上不拥有系统资源,也没有独立的地址空间(它的一切都是依赖于进程给的,是进程组成的基本单元),线程的改变只代表了CPU执行过程的改变,而没有发生进程所拥有的资源的变化。除了CPU之外,计算机内软硬件资源与线程无关,但它可与同属于一个进程的其他线程共享进程的全部资源。
总结一句话:进程可以划分为多个分离的、独立运行的任务,这些任务就是线程。也可以说,线程就是进程的组成部分,多个线程组成一个进程。
线程可以使程序从系统调度中抽身出来,即代码不必知道它是运行在具有一个还是多个CPU的机器上。所以,使用线程机制是一种建立透明的、可扩展的程序的方法,如果程序运行的太慢,为机器添加一个CPU就能很容易的加快程序的运行速度。多任务和多线程往往是使用多处理器系统的最合理方式。
例如我们需要通过代码的形式生产一台汽车,这些代码就是程序。生产汽车是一个整体的独立的任务,而这个任务就是进程。生产汽车需要很多小的任务支持它,如需要生产车胎、生产车窗、生产引擎等等。这些小的任务就是线程。大多数操作系统都会轮流的调用线程,但由于CPU的执行较快,可看做这些线程是在并发执行。
一、程序的顺序执行
在早期无操作系统及单道批处理系统时,程序都是按照顺序进行执行的。先进入内存的先执行,在执行的过程中不能执行其他的程序。程序中的指令也是按照顺序执行,一条指令正在执行时不能开始执行另一条指令。所以程序顺序执行有以下几个特点。
1.1、顺序性
处理机的操作,严格按照顺序执行,前一操作还没执行完毕,后继操作则不能继续执行。
1.2、封闭性
程序是在封闭的环境下运行的。即程序在运行时独占全机资源,各资源的状态只有本程序才能改变。程序一旦开始运行,其结果不受外界的影响。
1.3、可再现性
只要程序的环境和初始条件相同,无论程序执行多少次,执行结果相同。例如一个加法运算,无论执行多少次,相加的结果都不会发生改变。
二、程序的并发执行
程序的并发执行是指在同一时间间隔内运行多个程序。也就是在一个程序运行结束之前,可以运行其它的程序。对于用户来说,有多个程序在同时向前推进,但是从微观上来看,任意时刻CPU上都只有一个程序在执行。在多道程序系统和分时系统都允许程序并发执行,程序的并发执行有以下几个特点。
2.1、间断性
程序在并发执行时,因为要共享资源,但是资源往往都少于正在执行的程序数,所以会存在资源抢占的问题。因而,每个程序在CPU上运行,都是时断时续的。当一个资源被占用时,其他需要该资源的程序不得不暂停,待资源被释放时方可执行。
2.2、失去封闭性
程序正在并发执行时,由于它们共享资源或者合作完成同一项任务,系统的状态不再受其中一个程序的控制和改变,所以就失去了封闭性。比如淘宝卖商品,每卖出一件库存都要减去1,而进货又可以对库存进行增加,所以库存已经不是某个程序特有的了。伪代码如下:
<?php
//卖出商品
sentProduct('商品1');
$stock--; //库存减一
//进货
purchase('商品1');
$stock += 10; //库存加10
?>
2.3、不可再现性
因为程序在并发执行时失去了封闭性,所以任何一个程序都有可能对系统的状态进行改变,这也意味着程序执行的结果可能会不相同。例如两个程序同时往一个文件追加内容,在执行数次之后,每个文件所展现出的内容可能各不相同。
<?php
//程序a往文件追加1
for ($i = 0; $i < 5; $i++) {
file_put_contents('/tmp/test.txt', 1, FILE_APPEND);
}
//程序b往文件追加2
for ($i = 0; $i < 5; $i++) {
file_put_contents('/tmp/test.txt', 2, FILE_APPEND);
}
?>
同时执行两次的结果:
1212121212 //结果1
1122122121 //结果2