程序的并发执行
一、程序的顺序执行
在早期无操作系统及单道批处理系统时,程序都是按照顺序进行执行的。先进入内存的先执行,在执行的过程中不能执行其他的程序。程序中的指令也是按照顺序执行,一条指令正在执行时不能开始执行另一条指令。所以程序顺序执行有以下几个特点。
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
推荐阅读
-
sql server代理中作业执行SSIS包失败的解决办法
-
PHP程序员简单的开展服务治理架构操作详解(三)
-
java打字游戏-一款快速提升java程序员打字速度的游戏(附源码)
-
PHP程序员简单的开展服务治理架构操作详解(一)
-
最简单的ArcGIS Engine应用程序(上)
-
sqlserver关于错误“provider: TCP提供程序, error: 40-由于目标机器积极拒绝,无法连接”的解决
-
linux cron 下的定时执行工具使用技巧
-
C# Winform程序实现防止多开的方法总结【亲测】
-
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
-
.Net Core中使用ref和Span
提高程序性能的实现代码