串行与并行

摘要:程序或程序段在系统中有两种执行方式。一种是顺序执行,一种是并发执行。但是很多时候我们写的是串行的程序,而操作系统确实又要并发执行程序,这往往会产生一些让程序员感到“很奇怪”的错误。本文就UNIX下和WINDOWS下的并发问题进行了讨论,从例子中可以看到操作系统确实是在并发执行程序。

1、 问题提出:

很多人在调试程序的时候发现,单独运行一个程序实体时能够得到正确的结果,当同时运行两个或多个实体时运行结果不正确。这样的错误也是初级程序员容易犯的,这是因为操作系统是并发执行程序的,而程序员写的是串行的程序。

2、 串行与并行:

有两种执行程序的方法。一种是顺序执行,另一程是并发执行。所谓顺序执行就是指程序中的程序段必须按照先后顺序来执行,也就是只有前面的程序段执行完了,后面的程序段才能执行。这种做法极大地浪费了CPU资源,比如系统中有一个程序在等待I/O输入,那么CPU除了等待就不能做任何事情了。为了提高CPU的使用效率、支持多任务操作,操作系统中引入了并发技术。所谓并发是指系统中的多个程序或程序段能够同时执行,这里的同时执行并不是指某一个时刻多段程序在同进执行(除非有多个CPU),而是CPU能把时间分给不同的程序段。比如前面等待I/O的例子,若采用并发技术,当一个程序在等待I/O时,系统可以把CPU资源分配给另外的程序,这样能减少CPU的空闲时间提高了资源利用率。

3、 操作系统如何实现并行:

在操作系统中有多种实现并发的技术,最常见的就是多进程和多线程技术。进程是程序一次运行的过程,它是动态的、有生命周期。我觉得可以举这样一个例子来理解一个进程。建房子的过程是这样的:首先由设计师设计好房子,然后由施工人员按照设计好的图纸把房子建起来。在这里,我们写好的程序代码就好像是设计好的图纸,而进程就是按照这张图纸把“房子”建起来的整个过程,也就是按照“图纸”实现整个程序功能的过程。线程是进程内一个相对独立的、可调度的执行单元。线程存在于进程中,每一个进程中可以有多个线程。

4、 并行的特征:

1、不可再现性:也就说,当一个程序重复执行时,即使初始条件相同,运行结果可能不相同。

2、间断性:由于多个程序同时在系统中执行,系统要为每个程序分配CPU时间,这样就会导致一个程序可能在没执行完就被剥夺了CPU的使用权,从而导致程序运行时是间断的。在并发系统中,很多程序都是按执行----暂停----执行的活动规律运行的,其中有些程序是因为所分配的CPU时间用完了而中断,有些是为了同步而中断。

3、失去封闭性:程序并发执行时共享系统的资源,这样使得系统资能够被多个程序改变,也就是说一个程序的运行能够影响到另一个程序的运行,使得程序的运行不再是在一个封闭的环境下了。

5、并发控制技术:

处理并发问题的技术主要有信号、信号量、文件锁、互斥量、临界区、事件等。这里有些是用来解决并发时的互斥问题有些是用来解决同步问题的,下面我主要讨论下文件锁在并发操作中的使用。所谓文件锁就对一个文件所加的锁,当一个进程对一个文件进行加锁后,就可以限制其他进程对该文件进行访问。比如在系统中有两个进程AB要对同一个文件进行读写操作,由于AB在系统中并发执行,所以在不加锁的情况下AB读到“脏”数据。现在加上文件锁,假设第一次是A进程得到了锁,当B进程想读写时就会被拒绝,在A写完数据后再解开锁,这时B就可以访问文件了并对它加锁,B读写完后再释放锁。这样AB都不会读到脏数据,运行结果也就会是正确的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值