失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【多线程】JAVA进程 并发/并行 进程管理

【多线程】JAVA进程 并发/并行 进程管理

时间:2020-10-16 18:03:54

相关推荐

【多线程】JAVA进程 并发/并行 进程管理

前言:

小亭子正在努力的学习编程,接下来将开启javaEE的学习~~

分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~

同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~

目录

预备知识:

(一)操作系统的简单介绍

(二)核心数

二、什么是进程/任务(Process/Task)

三、 并行和并发

四、进程管理

1. 描述一个进程

2、组织多个进程

六、内存分配 —— 内存管理(Memory Manage)

七、进程间通信(Inter Process Communication)

预备知识:

(一)操作系统的简单介绍

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

操作系统由两个基本功能:

1) 防止硬件被时空的应用程序滥用;

2) 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备

【简单点说就是:向上管理给软件提供稳定的运行环境,向下管理硬件设备,进一步说:操作系统是软件,硬件,用户之间交互的媒介】

(二)核心数

程序运行起来(进程), 是依靠 CPU 的, 每个程序, 可以理解为一组二进制指令的集合

CPU 中有一个重要概念:核心数

【买电脑时, 经常会看到一个参数是 CPU 为几核几线程

拿 8 核 16 线程的 CPU 举例, 意思就是: 内核(物理核心)为 8 , 逻辑处理器(逻辑核心)为 16,

=逻辑核心=16

---》8 个物理核心, 16 个逻辑核心的意思就是: 一个核心能干俩核心的活 ~~】

二、什么是进程/任务(Process/Task)

每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

简单地说:一个运行起来的程序,就是一个进程/任务。

三、 并行和并发

并行:在同一时刻, 两个核心上执行两个进程, 此时这两个进程就是 并行 执行

并发 : 一个核心上, 先执行进程A, 再执行进程B, 再执行进程A…两个进程快速切换, 此时只要切换速度够快, 看起来就是同时执行两个进行微观上看起来是只执行了一个进程, 宏观上看实际上是多个进程同时并发执行。

【举个栗子:时间管理大师同时和好多个妹子聊天,只要分配好时间,就相当于同时谈了好几个妹纸!!!】

【简单来说:

并发:在同一时刻,有多个指令在个cpu上交替执行

并行:在同一时刻,有多个指令在个cpu上同时执行。】

通过任务管理器的截图我们可以看出电脑上似乎只运行了7个应用,但是后台进程有126个。

假设我的 CPU 的核心数是 16 个, 平均每个核心都要执行9+个进程, 如果电脑同时运行的程序更多, 平均每个核心执行的进程就更多。

如果每个核心只执行 1 个进程, 没什么需要关心的, 但是如果每个核心要执行很多个进程, 就需要管理这些进程, 以及通过 并行 + 并发 的方式完成执行

四、进程管理

(一)进程管理(调度) ---- CPU资源的分配 : 不同的进程在不同的时间段去使用 CPU 资源

进程是管理 分为两步 :描述 + 组织

1、描述一个进程: 这里使用结构体(c语言的结构体) 来描述进程属性 , 另外用来描述进程的这个结构体 ,被称为 PCB ( process control block - 进程控制块进程控制块)

2、组织多个进程 : 通过一定的数据结构将多个这样的基本单位给串起来 。

组织使用的数据结构是双向链表,用双向链表键 多个PCB 给串到一起 。

创建一个进程 , 本质上就是创建一个 PCB 这样的结构体对象,把它插入到链表中。

销毁一个进程,本质上就是把链表上的PCB 节点删除掉

任务管理器查看到的进程列表,本质上就是遍历整个PCB链表.

下面来了解一下 进程(PCB) 的一些属性/ 特征 :

【举个栗子:一个学校需要管理很多学生,建立一个学生管理系统

步骤:1、明确每个学生的相关信息

2、通过Excel表格把这些学生的信息整理存放起来】

1. 描述一个进程

进程的 结构体 / 类 称作 PCB(process control block) 进程控制块抽象

其中的属性有很多, 下面介绍其中的几个重点 :

pid:一个唯一整数, 表示一个进程唯一的 “身份标识”

内存指针:操作系统会给我们的进程分配一定的系统资源(包括但不限于内存,cpu,硬盘),这里主要就是内存,内存指针相当于划分了边界,表明了这一块内存是我们的,相当于国家与国家的边界。

文件描述符表:进程运行时使用了哪些硬盘上的资源,这些使用数据通常是以文件为单位, 进程每次使用硬盘资源(打开文件), 就会生成一个文件描述符, 而一个进程通常会打开很多文件, 就会生成一组文件描述符, 从而形成文件描述符表

【内存指针表示进程运行时使用了哪些内存资源,文件描述符表表示进程运行时使用了哪些硬盘资源】

4、一组用来辅助进程调度的属性,包括 :

进程的状态 >>>分为两种:

就绪态 和 阻塞态

就绪态 :该进程已经准备好随时可以上cpu执行

阻塞态 :该进程暂时无法执行

进程的优先级 : 多个进程执行的先后顺序不是公平的, 有些进程需要优先执行

【举个栗子:按照上面时间管理大师的例子,长好看身材又好的小姐姐A发的消息先回,身材好长得一般的小姐姐B发的消息其次回,长得一般身材也一般的小姐姐C发的消息最后回,长得丑的小姐姐D发的消息不回】

进程的上下文 : 并发执行时, 进程之间会切换调度, 这就需要记录每个进程离开时的中间信息(CPU中寄存器的值), 相当于"存档", 当该进程回来时, 进行"读档", 继续执行。

【举个栗子:按照上面时间管理大师的例子,大师把消息回差了,约A的消息发给了D,和D分手的消息发给了A这不就尴尬了吗?所以大师每次都会记录一下和小姐姐们之前聊了啥,再聊之前先看一下】

扩展 :

更细节点来说进程的上下文就是CPU 中的各寄存器的值

寄存器 : CPU内置的存储数据模块 保存的就是程序运行过程中的中间结果 ,

保存上下文 : 就是把这些CPU 寄存器的值记录保存到内存中(PCB中)

回复上下文 : 就是把内存中的这些寄存器值恢复回去.

进程的记账信息 : 用来统计每个进程执行的时间, 作为调度的参考, 毕竟不能让某个进程一直执行从而"冷落"其他进程。

【这个大师他已经与 ABC相处了一段时间。

他有一个小习惯 , 每隔一段时间 做一个总结 ,统计一下,一个月内再每个人身上大概花费了多少精力。

假设 A 陪了 10 天 , B陪了 5天 , C 陪了 15天,那么他发现,这个月陪B的天数有点少了, 下个月多陪陪她,防止人家的好感度降低最后不和我们谈了。这里就需要始终保持一个合适的尺度,不能太远也不能太近。】

总的来说记账信息就是统计了每个进程,都分别被执行了多久,分别都执行了那些指令。分别都排队等了多久了…

这里记账信息就可以统计每个进程当前再CPU的资源,然后再根据这里面的统计结果,来去对那些分配特别少,特别不均衡的进程,再去做出一些补偿。

2、组织多个进程

操作系统组织多个进程使用的数据结构一般是 双向链表 , 每个结点就是PCB(进程控制块)

创建一个进程就是在双向链表中新增一个结点

销毁一个进程就是在双向链表中删除一个结点

遍历所有进程列表就是遍历双向链表(例如任务管理器中看到的所有进程, 就是遍历进程列表后, 依次显示这些进程信息)

六、内存分配 —— 内存管理(Memory Manage)

操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰

七、进程间通信(Inter Process Communication)

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

(Isolation)“。但现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,如此,进程之间就需要有进行“信息交换“的需求。进程间通信的需求就应运而生。

目前,主流操作系统提供的进程通信机制有如下:

1. 管道

2. 共享内存

3. 文件

4. 网络

5. 信号量

6. 信号

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

简单地说:就是在隔离的前提下,找一个公共区域,让两个进程借助这个区域来完成数据交换。

【举个栗子:封校外卖不让进,学生出不去,学校找了一个地方让外卖小哥把外卖放到那,学生去那里拿】

以上就是本文的主要内容,下一篇 多线程~~~

如果觉得《【多线程】JAVA进程 并发/并行 进程管理》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。