JAVASE 小白学习笔记 一文带你理解操作系统的进程与线程


对于程序员来说操作系统的进程与线程而言是熟悉的,但对于其工作原理是否有足够的了解呢。今天拜读了一篇关于操作系统中进程与线程的文档后,想要谈谈自己的理解,在此分享给大家,希望对大家有所帮助。
在这里插入图片描述


1.进程

1.1 进程的概念

在日常的工作中,我们编写的代码知识存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件。当我们运行这个可执行文件后,它就会被装载在内存中,接着CPU会执行程序中的每一条指令,那么这个运行中的程序,就被称为进程。简单得来说,我们可以将运行中的程序,称为进程。
当我们运行读取文件的指令去硬盘去读取数据,考虑到硬盘的读写速度是非常慢的,那么这个时候,如果CPU不停等着从硬盘返回的数据,那么CPU的利用率是非常低的。

  • 举个生活中的小例子,我们在用热水器烧水时,我们不会静静的等待水开。我们可以在水开前做其他的事,当水烧开时会有温度的显示并会有"滴滴滴"的声音,这时我们就可以将烧开的水放入容器中。

  • 类似的,进程也是如此。当进程读取硬盘上的文件时,CPU不需要阻塞等待从硬盘上返回的数据,可以去执行其他的进程。当读取完硬盘上的数据时,CPU会接收一个中断,于是CPU再去运行这个进程。
    在这里插入图片描述

  • CPU管理多个进程的的初步思想就是这种多个程序、交替进行执行的思想。


1.2 并法与并行的区别

  • 对于一个多进程的系统,CPU能从一个进程快速切换另一个进程,期间每个进程只运行几十毫秒到几百毫秒。

  • 对于一个单核的CPU在某一个瞬间,只能运行一个进程。但假如在一秒的时间中,它可能会运行多个进程。给你的感觉是在并行,但其实这是在并发执行。

并发与并行的区别
解释一:并行是指两个或多个事件在同一个时刻发生;而并发是指两个或者多个事物在同一时间间隔发生。
解释二:并行是在不同的实体上的多个事件,并发是在同一个实体上的多个事件

利用图像更直观的说明并发与并行之间的区别。
在这里插入图片描述


1.3 进程的状态变迁

  • 到了晚饭时间,一对小情侣肚子都咕咕叫了,于是男生见机行事,就想给女生做晚饭,所以他就在网上找了辣子鸡的菜谱,接着买了一些鸡肉、辣椒、香料等材料,然后边看边学边做这道菜。突然,女生说她想喝可乐,那么男生只好把做菜的事情暂停一下,并在手机菜谱标记做到哪一个步骤,把状态信息记录了下来。然后男生听从女生的指令,跑去下楼买了一瓶冰可乐后,又回到厨房继续做菜。
  • 这就体现了CPU可以从一个进程(做菜)切换到另外一个进程(买冰可乐),但在切换前需要记录下当前进程中运行的状态信息,以便下次切换回来还可以恢复执行。
  • 这样我们发现进程有【运行】–【暂停】–【运行】的状态。

而实际上一个进程的状态有很多种,下表列出了进程间的各个状态。

进程的各个状态 含义
运行状态 该时刻占用了CPU
就绪状态 可运行,但因为其他进程正在运行而暂停停止
阻塞状态 该进程正在等待某一事情的发生而暂停运行,这时即使CPU给其执行权,它也无法进行执行
创建状态 进程正在被创建时的状态
结束状态 进程从系统中消失时的状态

下图说明进程间各个状态之间的转换:

在这里插入图片描述

解释上图中进程的状态变迁
Null->创建状态:一个新进程被创建时的第一个状态
创建状态->就绪状态:当进程被创建完成进行初始化后,一切就绪准备正常运行时就会变为就绪状态
就绪状态->运行状态:处于就绪状态的进程被调度,分配给CPU被执行,正常运行此进程
运行状态->结束状态:当进程已经被运行结束时,会被操作系统结束状态处理
运行状态->就绪状态:处于运行中的进程正在被运行时,由于分配给它的时间片已经用完,这时操作系统会将它置为就绪状态,接着就绪状态进行选中一个进程进行执行
运行状态->阻塞状态:当进程请求某个事情必须等待时
阻塞状态->就绪状态:当进程要等待的事情完成时,阻塞状态会变为就绪状态

2.线程

在早期的计算机操作系统中,都是以进程作为独立运行的基本的单位,直到后面,计算机科学家提出了线程。


2.1 为什么要使用线程

我们举个简单的例子,我们要编写一个关于视频播放器软件,那么设计这个视频播放器软件的模块可以分为三个模块:

  • 1.从视频文件中读取数据
  • 2.对读取出的数据进行解压缩
  • 3.将解压缩的文件数据进行播放

对于单进程的实现我们可以简单的进行这样的实现:
在这里插入图片描述
对于单线程这种方式,对存在这样一些问题:

  • 首先在单线程运行过程中,读取文件是一个非常耗时的操作,进程可能在Read()部分执行的时间比较长。这样会导致要等待Read()部分执行完毕时,才能进行解压缩文件数据与播放视频文件的操作,大大得降低了用户的体验感。
  • 其次各个函数之间不是并发执行的,会影响资源的使用的效率。

按照这种思路,我们联想到使用多进程的方式
在这里插入图片描述

对于多进程的方式,又会存在一些问题:

  • 1.进程之间如何进行通信,进行共享数据呢?
  • 2.维护进程的系统开销比较大。

那到底该如何解决呢,需要有一种新的实体,满足以下这些特性:

  • 1.实体之间可以并发运行
  • 2.实体之间共享相同的地址空间

这个新的实体就是线程,线程之间可以并发运行且享有相同的地址空间。


2.2 什么是线程

线程是进程中的一条操作流程。

  • 注意:同一个进程中内多个线程之间是可以共享代码段,数据段,以及打开的文件资源等,但每一个线程都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的。

在这里插入图片描述

多线程的优点有:

  • 1.一个进程中可以同时存在多个线程;
  • 2.各个进程之间可以并发执行;
  • 3.各个进程之间可以共享地址空间与文件等资源。

多线程的缺点:

  • 当进程中的一个线程崩溃时,会导致所属进程的其他所有线程崩溃。

3.进程与线程的比较

最后将进程与线程的比较列出如下表:

进程与线程的比较
1.进程是资源分配的单位,线程是CPU调度的单位
2.进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器与栈
3.进程同样具有就绪、运行与阻塞三种基本的状态,同样具有状态之间的转换关系
4.线程能减少并发执行的时间与空间开销

总结

以上就是自己对操作系统中进程与线程的简单认识,希望能对大家有所帮助。小弟又要去搬砖了,下次见。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41537102/article/details/113058854