计算机基础:区分概念-程序与进程、进程与线程

前言

最近在看《现代操作系统》这本书,感觉里面讲的一些概念非常通俗易懂,因此也会摘抄一些过来,有必要的情况下,我会加上自己的理解

进程与程序的区别(摘抄)

进程和程序之间的区别是很微妙的,但很重要。

 

用一个比喻可以是我们更容易理解这一点。

想象一位好厨艺的计算机科学家正在为他的女儿烘培生日蛋糕。他有做蛋糕的食谱,厨房里有所需的原料:面粉、鸡蛋、糖、香草汁等。在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法),计算机科学家就是中央处理器(CPU),而做蛋糕的各种原料就是输入数据。进程就是厨师阅读食谱、取来各种原料以及烘培蛋糕等一系列动作的总和。

现在假设计算机科学家的儿子哭着跑进来,他的头被一只蜜蜂蛰了。计算机科学家就记录下他照着食谱做到了哪儿(保存进程的当前状态),然后拿出一本急救手册,按照其中的指示处理蛰伤。这里,我们看淡到处理机从一个进程(做蛋糕)切换到另一个高优先级的进程(实施医疗救治),每个进程拥有各自的程序(食谱和急救手册)。当蜜蜂蛰伤处理完之后,这位计算机科学家又回来做蛋糕,从他离开时的那一步继续做下去。

 

这里的关键思想是:一个进程是某类型的一种活动,它有程序、输入、输出、状态。单个处理器可以被若干个进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转为另一个进程服务。

 

进程与线程的区别

关于这个问题,我看到最多的回答方式就是:进程的特点是xxxx,线程的特点是xxxx,然后有怎样的区别。并且大多数答案都是一些培训机构为了面试给出的答案,仅仅从他们两个有什么不同来说的。

当时我看了那些答案,觉得对线程和进程的区别以及联系有了正确的理解。但是知道我仔细阅读了《现代操作系统》中关于线程和进程的知识,发现我以前的认识不过是停留在表面上,那种理解程度,根本无法将知识应用到现实工作中。

 

下面给出我的答案:

要理解进程与线程的区别,要从他们发展的历史来看,并且要贯穿着一个问题:有了进程,为什么还要有线程?

当然有人会说,这很简单啊,因为线程的执行粒度更小,所以有线程。

这种说法当然正确,但是不确切。就好比我问你这个菜为什么更好吃,你说因为这个菜原料、烹饪手法都更好。但是你并没有讲出上个菜和这个菜到底是那个原料、调料提升了口味,为什么这个烹饪手法好,是烹饪时间更精确了,还是配菜更好了。

 

我们知道进程是最先出现的,为了实现程序的并行,发明了多进程并行处理计算机任务。当然这种并行是伪并行(错觉并行)。

 

在单核CPU的条件下,为什么要实现伪并行呢?

一个方面是从用户角度来看的,伪并行可以让我们同时运行多个进程,就比如我可聊着qq,还看着网页,然后打着游戏。多进程下,CPU会反复切换进程执行,给我们的感觉是每个每个进程都在执行。

另一个角度就是从CPU的利用率上来看的,我们使用的进程,其实有很大一部分时间是在和IO设备打交道的。啊?不对呀,我在用电脑的时候感觉计算机计算时间IO的时间更多,这种其实是不对的。因为和IO打交道的所用的时间是 毫秒级, CPU计算时间是 微秒 级别。所以我们的进程在很多时间都是在等待I/O操作,这时候,采取遇IO切换进程的机制就可以很好的提高CPU的利用率,从一定意义上实现了I/O操作与CPU计算的并行。

下图是CPU利用率与进程数目的关系

可以看到随着进程数量增加,CPU利用率会增加,因为每个进程都会存在等待IO,这时候就可以从阻塞的进程切换到其他的进程继续计算,提高CPU利用率。 但是进程增加越多,CPU的利用率就提不上去了,因为此时就绪的进程可能出现饥饿现象了,并且进程调度的开销也是非常大的,所以CPU利用率也就下来了。

 

那么,我们就会想,有没有一种轻量的进程(迷你进程)呢?在调用上不用消耗那么多的资源,那么我们就可以进一步加大这种轻量进程来提高CPU的利用率。并且,进程只能是完成独立的任务,那么有没有一种特殊的进程,可以实现多个特殊进程协调的完成同一件任务?

这时候,线程就出现了。

1、多进程只是实现了并行,但是他们是独立了,因为他们具有不同的地址空间,无法共享资源。就比如我可以同时打开QQ、微信、支付宝。但是在qq上我不能同时聊天和视频,只能干一件事,因为qq是单进程单线程的。而多线程不同,他不但实现了并行,还拥有共享同一个地址空间和所有可用数据的能力,因此这时,我就可以用QQ边聊天边视频。

2、如果存在大量的I/O处理,拥有多线程允许彼此重叠进行,增加程序执行速度。

对于上面第2条,肯定有人会认为进程也可以完成I/O情况下的重叠进行。但是我们要注意:多进程是交替完成单独的任务,而多线程是交替完成一个共同的大任务

线程的概念试图实现的是,共享一组资源的多个线程的执行能力,以便这些线程可以为完成某一项任务而共同工作。(这才是线程最大的特点)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值