《操作系统》- 线程与进程

一、进程的概念

  • 程序放在磁盘上不叫做进程,只有运行起来之后才叫做进程,进程进程就是进行中的程序!
  • 一次运行就会有一个进程,当再次运行的时候就会产生一个新的进程,浏览器就是这样的,而有的应用程序就不是,当已经在运行的时候再次运行会打开上次运行的程序。我们可以打开应用然后通过任务管理器进行观察就可以发现。
  • 进程是操作系统进行资源分配和调度的一个独立单位(或者说是基本单位)

二、进程的结构和特征

2.1 进程的结构

进程主要有控制块(PCB)、数据段、程序段三部分构成,下图当中把这三块比喻成了一个人,也就是进程。

  • 控制块:操作系统就是根据PCB来区分进程的,可以理解为每个进程有一个自己的唯一编号,就好比每个人都有自己的身份证一样,每个进程的PCB都是不重复的。
  • 数据段:每个进程的数据都是不一样的,并且不存在共享,可以理解为就是人的身体
  • 程序段:可以理解为就是磁盘当中存储的应用,以程序员的理解其实就是应用的代码,也就是多个进程可以共享一个程序代码。再通透一点,电脑安装了一个浏览器,却可以打开多个浏览器页面,多个浏览器页面就是多个进程。

PCB的存储信息与分类

2.2 进程的特征

  • 动态性:进程是程序的一次执行过程,是动态地产生、变化和消亡的
  • 并发性:多个进程可以并发执行
  • 独立性:独立资源分配,每个进程都有自己的内存区域。
  • 异步性:不用等待别的进程处理完成所以他是异步的、相互独立的、互不干扰。

三、线程的概念

线程可以理解为就是从进程当中分裂出来的一个指令集合。一个进程可以包含多个线程。也可以只存在一条线程,并且线程不能单独存在。线程的资源是由进程进行管理的。

我们打开一个应用就是进程,然后应用当中的每一个功能就对应了一个线程。

拿qq举例:打开qq就是一个进程的运行,这个时候在任务管理器当中是可以看得到该进程的,然后打开qq里面的qq空间就是一条线程,然后跟A聊天就又是一个线程,跟B聊天就又是一个线程。

面试的时候经常会问进程线程的区别:

  • 进程是操作系统 资源分配调度 的基本单位
  • 线程是操作系统 运算调度 的最小单位

想不起来的时候就想一下电脑的任务管理器,任务管理器当中显示了进程,并且显示了进程占用的内存CPU等信息。也就是操作系统是给进程分配空间而并不是线程。

线程下还有一个纤程(了解即可)

  • 纤程:线程是在Windows内核中实现的,操作系统会根据系统的调度算法对线程进行调度。 纤程是在用户模式下实现的,内核对纤程一无所知。 纤程是更轻量级的线程,一个线程可以包含一个或多个纤程。

Java 原生没有提供纤程支持,需要依赖于 quasar-core的库,来创建纤程。感兴趣的可以了解一下,据说是多线程与多纤程计算耗时相比较差距是非常大的,多纤程要比多线程快的多。

线程的属性:

四、进程和线程比较

五、线程的实现方式

线程的实现分为两类:用户级线程(User-Level Thread,UTL)和内核级线程(Kernel-Level Thread, KTL)l。内核级线程又称内核支持的线程。

在用户空间完成的线程就是用户级线程、在内核空间完成的线程就是内核级线程。这里的完成,包含了线程的创建、执行、和销毁。

(1)用户级方式

操作系统提供了线程库,线程库包含了创建线程和销毁线程以及执行线程的接口。操作系统根本不知道线程这个东西,他在执行的时候是以进程装载线程指令来执行的。假如某个线程想要操作内核,这时候会通过陷入指令进行中断,一旦中断其他线程都将阻塞。优点:如果线程不访问内核,只是线程切换,效率比较高。因为所有的线程都在用户空间。

  • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。
  • 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行(因为此时只有一个内核级线程)。

(2)内核级方式

内核级线程的线程控制块在内核空间,上面我们提到了进程由控制块(PCB)、数据段、程序段这三部分构成,而线程他也有,只不过线程的控制块是叫做线程控制块(TCB)。内核级方式就是将线程的控制块存放到内核当中,然后处理器直接切换控制块来完成线程的切换。这时候就完成了线程的并行。

  • 优点:当一个用户级线程被阻塞后,别的用户级线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
  • 缺点:一个用户进程会占用多个内核级线程,而内核级线程的切换由操作系统内核完成,需要切换到核心态,因此线程管理成本高、开销大。

本质上内核级方式和用户级方式 两者的区别就是线程的控制块到底是在用户空间还是在内核空间。

(3)特殊的组合方式

这种模型克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点,是上述两种模型的折中方案。

参考:《马士兵操作系统讲解》https://www.bilibili.com/video/BV1Ha411e7D4/

猜你喜欢

转载自blog.csdn.net/weixin_43888891/article/details/131534525