多线程(JavaEE初阶系列1)

目录

前言:

1.程序

2.操作系统(Operating System)

3.进程(process)/任务(task)

4.进程控制块抽象(PCB Process Control Block)

5.CPU分配--进程调度(process Scheduleing)

6.内存分配--内存管理(Memory Manage)

7.进程间通信

结束语:


前言:

从这节开始小编就开始带着大家一起走进JavaEE初阶系列的课程我们一起来探讨有关于JavaEE的一些基础知识吧,如果之前没有看过小编其他系列小编建议大家先去看看前面的课程再来看这些课程吧!话不多说现在我们就开始吧!

1.程序

什么是程序呢?这里小编给大家说一下有关于程序的概念,所谓程序就是一组指令以及这组指令要处理的数据,狭义上来说,程序对我们来说,通常表现为一组文件。

程序 =  指令 + 指令要处理的数据。

那么这些操作程序的指令当然都要建立在操作系统上的。那么什么是操作系统呢?

2.操作系统(Operating System)

操作系统是一组做计算机资源管理的软件的统称,目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、IOS系列、鸿蒙等。

上面举的这些都是软件,他们的作用是:

        ①对下他们要管理好各种硬件设备。

        ②对上他们要给软件提供稳定的运行环境。

比如某个软件程序要想操作某个硬件设备此时就需要通过操作系统来进行完成。

如下图所示:
多线程(JavaEE初阶系列1)_第1张图片

操作系统本身就是一个非常庞大的话题,是一个非常复杂的软件,功能非常多,其中有一个和咱们现在密切相关的功能模块就是进程管理。那么下来小编就与大家一起探讨一下什么是进程管理。

3.进程(process)/任务(task)

进程是操作系统对于一个正在运行的程序的一种抽象,换言之,可以把进行看做是程序的一次运行过程,同时在操作系统内部,进程又是操作系统进行资源分配的基本单位。其实大家可以简单理解就是一个运行起来的程序就是一个进程!!!如下所示。

上述的.exe文件就是一个可执行的文件(程序)当双击的时候,这个程序就会跑起来于是就在系统中形成了一个进程。 

我们可以通过打开任务管理器来看到正在运行在电脑上的进程都有哪些。多线程(JavaEE初阶系列1)_第2张图片

那么这么多的进程都要运行在电脑上,此时我们就需要将他们都管理起来,所以就有了进程管理。所谓管理其实就是分两步:

  • 描述一个进程:使用结构体/类把一个进程有哪些信息,表示出来。
  • 组织这些进程:使用一定的数据结构,把这些结构体/对象,放到一起。

例如下面的这个例子:
一个学校很多学生学校就需要管理这些学生,就需要一个学生管理系统,在学生管理系统中要明确两点:

  • 明确每个学生相关的属性信息。
  • 通过一定的数据结构把这些学生的信息都放起来(比如通过表格的方式......)。

那么进程的结构体里又有哪些属性呢?接下来就需要我们了解PCB了。

4.进程控制块抽象(PCB Process Control Block)

计算机内部需要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据,在Java语言中,我们可以通过类/对象来描述这一特征。

class PCB{
    //进程的唯一标识 -- pid
    //进程关联的程序信息,例如哪个程序,加载到内存中的区域等。
    //分配给该资源使用的各个资源。
    //进度调度信息
}

这样,每一个PCB对象,就代表一个实体在运行着的程序,也就是进程。

操作系统再通过这种数据结构,例如线性表、搜索树等将PCB对象组织起来,方便管理进行增删查改的操作。

解释:

1.pid:每个进程需要有一个唯一的身份标识。

2.内存指针:当前这个进程使用的内存时哪一部分。

3.文件描述符表: 文件比如硬盘上存储的数据,往往就是以文件为单位进行整理的。进程每次打开一个文件,就会产生一个“文件描述符”(标识了这个被打开的文件)一个进程可能会打开很多文件,对应一组文件描述符。把这些文件描述符放到一个顺序表这样的结构里,就构成了文件描述符表。

4.接下来这一组属性,都是描述和CPU资源相关的属性,这些属性都是辅助进行进程调度

进程状态:简单认为,进程状态主要是这两个:

  • 就绪状态:该进程已经准备好,随时可以上CPU执行。
  • 阻塞态:该进程暂时无法上CPU执行。

进程的优先级:

进程之间的调度不一定是“公平”的,有的要优先级调度。

进程的上下文:
上下文就是描述了当前进程执行到哪里这样的“存档记录”,进程在离开CPU的时候就要把当前运行的中间结果“存档”。等到下次进程回来CPU上,再恢复之前的“存档”,从上次的结果继续往后执行。

进程的记账信息:
统计了每个进程,在CPU上执行了多久,可以作为调度的参考依据。

5.CPU分配--进程调度(process Scheduleing)

为了便于讨论和理解,我们大部分的场景下假设是单CPU单核的计算机。

操作系统对CPU资源分配,采用的是时间模式,不同的基础在不同时间去使用CPU资源。

6.内存分配--内存管理(Memory Manage)

操作系统对内存资源的分配,采用的是空间模式,不同的进程使用内存中的不同区域,互相之间不会干扰。操作系统给进程分配的内存时以“虚拟地址空间”的方式进行分配的,每个进程访问的内存地址,都不是真实的物理内存地址。

7.进程间通信

如上所述,进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程互相具备“隔离性”。

但现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,如此,进程之间就需要有进行“信息交换”的需求。进程间通信的需求就应运而生。所谓进程间通信就是在隔离性的前提下,找一块公共的区域,让两个进程借助这个区域来完成数据交换。

目前,主流的操作系统提供的进程通信机制也就是我们上述提到的公共区域有如下:

  • 管道
  • 共享内存
  • 文件
  • 网络
  • 信号量
  • 信号

其中,网络是一种相对特殊的IPC机制,它除了支持同主机进程间通信,还支持同一网络内部非同一主机上的进程间进行通信。

结束语:

这节中小编主要与大家分享了程序、操作系统的概念、进程与任务的概念、进程控制块抽象的概念以及PCB一些基本属性等等,后续中小编还会继续带着大家一起迈进JavaEE初阶,大家继续跟紧小编的步伐,一起往前冲!!!希望这节对大家有一定的帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)

你可能感兴趣的:(JavaEE初阶,java,开发语言)