程序 进程 线程

 

 

 

一,什么是进程?
        CPU在一个瞬间只能运行一道程序。但是在一个时间段内可能会运行多道程序,这样就给了我们一种程序并行的概念。这就是“伪并行”:CPU在多道程序间快速的切换。这个和不是真正的并行——多CPU系统可以做到真正的并行。这种实际上顺序,表象上是并行的模型就是顺序进程模型,那我们常说的进程其实就是顺序进程。一个进程就是一个正在执行的程序,包括程序计数器、寄存器和变量的当前值,每个进程拥有一个虚拟的CPU,CPU在进程间快速切换,形成了多道程序的处理。

二,进程和程序(在这里指的是算法)的关系?
        进程和程序的之间的区别很微妙,但却非常重要。
        举例如下:一个厨师,正在准备制作冰淇淋蛋糕。厨房里有各种做蛋糕的原料,面  粉、鸡蛋、糖,冰淇淋等,还有制作工具,搅拌机、旋转托盘等。厨师手边还有一个《制作冰淇淋蛋糕的工艺流程说明手册》。那么这本手册其实就是“程序”,主要是某种计算机能识别的形式描述的算法;厨师就是CPU,主要是按照程序,对计算机其它软硬件设备进行操作;而制作蛋糕的原料就是所需的输入数据,制作蛋糕的工具就是计算机各种设备了。而进程就是制作蛋糕的整个过程:厨师阅读食谱,根据食谱使用蛋糕制作工具和原料,加工成可口的冰淇淋蛋糕。
        那么,假如这个时候突然厨房另一段的某个灶炉着火了,那么厨师就会马上停止制作蛋糕;而开始根据《厨房安全突发事件处理手册》其中的灭火指南,拿起灭火器去灭火。那么其实这就是CPU从一个进程切换到了另外一个进程,而且每个进程都有各自的程序(《制作冰淇淋蛋糕的工艺流程说明手册》和《厨房安全突发事件处理手册》)。当火被扑灭后,厨师又会继续去制作他还未完成的冰淇淋蛋糕。
        总结:一个进程是某种类型的一个活动,它有程序、输入、输出及状态。单个CPU被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。

三,进程和线程的关系?
        在传统进程中,每个进程只存在一条控制线索和一个程序计数器。但是操作系统发展至今,已经能够支持到单个进程中多个控制线索。这些控制线索就是线程,也可以说是轻量线程。
       进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。线程是操作系统分时调度分配CPU时间的基本实体。一个线程可以执行程序的任意部分的代码,即使这部分代码被另一个线程并发地执行;一个进程的所有线程共享它的虚拟地址空间、全局变量和操作系统资源。之所以有线程这个概念,是因为以线程而不是进程为调度对象效率更高:
    1、由于创建新进程必须加载代码,而线程要执行的代码已经被映射到进程的地址空间,所以创建、执行线程的速度比进程更快。 
    2、一个进程的所有线程共享进程的地址空间和全局变量,所以简化了线程之间的通讯。
       很重要的一点:多线程经常不是程序员主动来使用的,而是在依赖操作系统时,已然是多线程了。即使用,也很有节制,滥用线程将适得其反。究竟什么地方应该使用多线程,并没有什么规则,将多线程用在该用的地方而已,当然不会刻意的使用它。

主要参考文献列表:
1、《操作系统:设计与实现(第二版)》上册,[美]Andrew S.Tanenbaum,Albert S.Woodhull著
2、《MFC的进程和线程》转至:http://www.vczx.com/tutorial/mfc/mfc8.php
3、《进程与线程杂谈》转至:http://www.sinoprise.com/read.php?tid=817&page=e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值