进程与线程

进程和线程的区别是什么?

  • 进程是资源分配的最小单位,线程是CPU调度的最小单位。
  • 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。
  • 进程有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段等。
  • 线程共享进程中的数据,使用相同的地址空间。因此线程的切换与创建比进程要容易的多。
  • 多进程程序更为健壮,多进程程序中每个进程之间都有自己的地址空间,是独立的。而多线程程序一个线程死掉,整个进程也死掉了。
  • 什么叫“多任务”呢? 简单地说,就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。
  • 单核CPU是怎么执行多任务的呢? 答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。
  • 对于操作系统来说,一个任务就是一个进程(Process)。有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。
  • 由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。

进程

1. 概念

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。

2. 进程的描述和组成

(1)程序用于描述进程要完成的功能,是控制进程执行的指令集;

(2)数据集合是程序在执行时所需要的数据和工作区;

(3)程序控制块(Process Control Block,PCB)

  • PCB是操作系统用于记录和刻划进程状态及有关信息的数据结构,是操作系统掌握进程的唯一资料结构。
  • 系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志进程与PCB是一一对应的,在创建进程时,建立PCB,并伴随进程运行的全过程,直到进程撤消而撤消。

PCB的内容

①标识信息:进程标识ID 、进程组标识ID、用户进程名、用户组名
②现场信息:寄存器内容(通用寄存器内容、控制寄存器内容、栈指针等)
③控制信息:进程调度信息、进程组成信息、进程间通信信息等

3. 进程具有的特征:

动态性: 进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的。
并发性: 任何进程都可以同其他进行一起并发执行。
独立性: 进程是系统进行资源分配和调度的一个独立单位。
结构性: 进程由程序,数据和进程控制块三部分组成。

4.进程的三种基本状态

(1)运行态(running)
当进程得到处理机,其执行程序正在处理机上运行时的状态称为运行状态。
在单CPU系统中,任何时刻最多只有一个进程处于运行状态。在多CPU系统中,处于运行状态的进程数最多为处理机的数目。

(2)就绪状态(ready)
当一个进程已经准备就绪,一旦得到CPU,就可立即运行 ,这时进程所处的状态称为就绪状态。系统中有一个就绪进程队列,处于就绪状态进程按某种调度策略存在于该队列中。

(3)等待态(阻塞态)(Wait / Blocked )
若一个进程正等待着某一事件发生(如等待输入输出操作的完成)而暂时停止执行的状态称为等待状态。 处于等待状态的进程不具备运行的条件,即使给它CPU,也无法执行。系统中有几个等待进程队列(按等待的事件组成相应的等待队列)。

在这里插入图片描述


线程

1.概念

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。

2.线程的特点

(1)线程是轻量级的进程
(2)线程没有独立的地址空间(内存空间)
(3)线程是由进程创建的(寄生在进程)
(4)一个进程可以拥有多个线程(即多线程编程)

3.线程的几种状态

(1)新建状态 (NEW) :线程刚被创建
(2)就绪状态 (READY) :准备就绪,抢占到CPU就可运行
(3)运行状态 (RUNNABLE) :线程处于可执行状态
(4)阻塞状态 (BLOCKED)、等待状态 (WAITING) 、超时等待 (TIMED_WAITING) :由于线程执行过程中缺少某些条件而暂时阻塞,一旦它们等待的条件满足时,它们将回到 RUNNABLE 状态重新竞争 CPU。
(5)终止状态 (TERMINATED) :线程执行结束,被终止。
在这里插入图片描述


系统中的进程线程模型是这样的:
在这里插入图片描述
1.进程从操作系统获得基本的内存空间,所有的线程共享着进程的内存地址空间。当然,每个线程也会拥有自己私有的内存地址范围,其他线程不能访问。

2.由于所有的线程共享进程的内存地址空间,所以线程间的通信就容易的多,通过共享进程级全局变量即可实现。

3.同时,在没有引入多线程概念之前,所谓的『并发』是发生在进程之间的,每一次的进程上下文切换都将导致系统调度算法的运行,以及各种 CPU 上下文的信息保存,非常耗时。而线程级并发没有系统调度这一步骤,进程分配到 CPU 使用时间,并给其内部的各个线程使用。

4.在分时系统中,进程中的每个线程都拥有一个时间片,时间片结束时保存 CPU 及寄存器中的线程上下文并交出 CPU,完成一次线程间切换。当然,当进程的 CPU 时间使用结束时,所有的线程必然被阻塞。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值