进程与线程

什么是进程?
简单来说进程就时一个正在执行的程序。这就够了
通过这个描述来深入挖掘。
我们来试想,如果一个进程(可以理解成程序),从启动到终止,这期间会一直处于运行状态吗?我们现在使用程序可不是说只有这一个程序运行。但是对于CPU而言,在某一个瞬间,CPU只能运行一个进程。想解决多个程序运行问题,就涉及到一个概念,多道程序设计。
我们打开我们电脑任务管理器,我们可以看到我们电脑的进程非常多,但是我们知道CPU在某个瞬间只能运行一个进程。我们知道CPU的运算速度是非常快的。比如P4 3G,每秒最高运行3G次,就是30亿次。正因为高速的处理模式,我们肉眼察觉才认为是多个进程同时进行。实际上是CPU在各个进程之间来回切换。这就是所谓的多道程序设计。
进程等不等于程序呢?
在现代操作系统这本书中已经很明确指出 ,二者十分相似但是绝对不可以等价
for example:
一个计算机科学家为他女儿烘制生日蛋糕,有做生日蛋糕的食谱,厨房里有需要的原料。 这里蛋糕食谱就是程序(也就是有适当形式的描述算法),计算机科学家就是处理器,原料就是输入数据。进程是这个科学家阅读食谱取来原料做蛋糕的总和
进程的范围大于程序。
如果说一个程序执行了2遍是几个进程呢?2个。
与一个进程有关的所有信息,除了改进程自身地址空间内容以外,都放在造作系统的一章表中,称为进程表。
进程三种状态
1:运行态(在该时刻实际占用CPU);
2:就绪态(可运行,因为其它进程正在运行而暂时停止);
3:阻塞态(除非某中外部事件发生,否则进程不能运行)。
这三种状态却有四种转换关系在这里插入图片描述
线程:
传统操作系统中,每个进程有一个地址空间和一个控制线程。
**线程就是什么呢?**就是进程中的进程,你可以认为是个迷你进程。
我们为啥需要线程这个东西呢?
我们在将山移平的时候,我们不是说一下子请两个大力神将这个山移走,而是慢慢的一块一块的将山上的石头树木搬走。这就是为什么要引入线程。通过线程将一个大应用程序分解成小块(准确来说是顺序线程),这样处理每一小块就简单许多。
当然这么回答给不懂的人好说,给面试官回答面试官智能给你两个字:老土。。。
怎么回答呢?
1:多进程的地址空间是不同的,多线程的地址空间是相同的,多线程具有并行实体共享一个地址空间和所有可用数据的能力;
2:线程比进程更轻量级,所以线程比进程更容易创建,也更容易撤销;
3:如果线程中存在着大量的计算和IO处理,多线程允许这些活动彼此重叠从而加快应用程序的执行速度。
IO处理是啥?
就是进程等待,此刻CPU空转。
然后我们就总体来说说多线程有益,使得并行成为了可能。
这时候该祭出这张表了
在这里插入图片描述
在线程中,程序计数器用来记录接下来执行哪一条指令,寄存器用来保存当前的工作变量,堆栈用来记录执行历史,其中的每一帧保存了一个已调用的但是还没有从中返回的过程。 在MordenOperatingSystem中讲到进程用于把资源集中到一起,线程则是CPU上被调度执行的实体。线程有时候被称为轻量级进程。
有个问题,当多线程在单CPU中执行时什么情况?
我们来细推:
进程多道程序执行时通过进程之间的来回切换,系统制造了不同顺序进程的假象,多线程也是如此,CPU在线程之间来回切换,就造成了线程并行的假象。
回归我们的这张表,所有的线程有完全一样的地址空间,也就意味着他们共享全局变量。各个线程都可以访问进程地址空间空间中的每一个内存地址,所以一个线程可以读,写甚至是清除另一个线程的堆栈,线程之间没有保护。
进程可不可以同时运行呢?
答案是“可以”,不过这是个假象,所谓同时,其实是linux系统在各个进程之间的调度,轮流使每个进程占用CPU的一个时间片。进程可以反复切换时间片,就看到了类似于同时进行的假象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值