【Java多线程】对进程与线程的理解

目录

1、进程/任务(Process/Task)

2、进程控制块抽象(PCB Process Control Block)

2.1、PCB重要属性

2.2、PCB中支持进程调度的一些属性

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

4、线程(Thread)

5、进程和线程的总结


1、进程/任务(Process/Task)

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

描述进程的是:PCB

组织进程的是:链表

2、进程控制块抽象(PCB Process Control Block)

进程是应用程序被调用时的一个状态,一个进程对应一个PCB,PCB是管理进程的,一个应用程序可以有多个进程。

2.1、PCB重要属性

  • PID,进程的标识符
  • 内存指针,描述进程使用的内存、指令/代码、数据的位置
  • 文件描述符表,进程使用的硬盘的相关信息

2.2、PCB中支持进程调度的一些属性

  • 状态

        用于描述这个进程当前的状态,能够通过状态得知此时是否方便去cpu上执行。

        例如:当某个进程通过Scanner等待用户输入内容时,此时如果用户还未输入内容,该进程就已经去cpu上执行并等待接收用户输入了,如果用户一直不输入,该进程就会一直占用cpu,导致其他进程无法调用执行cpu。

        而有了状态描述,就可以避免让这种进程在还未能执行时的“堵塞状态”,不去占用cpu,等到方便执行时(即用户输入完成后),给出一个“就绪状态”,此时就证明可以该进程可以去cpu上执行。

  • 优先级

        多个进程等待系统调度,这就需要有优先级。用于表示各个进程之间的优先级。

        例如:打游戏时,游戏和微信qq的优先级,想必也知道游戏的优先级更高。

  • 记账信息

        统计每个进程占据cpu的时间,可以根据统计结果进一步调整调度的策略。

  • 上下文

        PCB中的数据结构,支撑进程调度的重要属性,保存进程运行过程中的中间状态到内存中。通过上下文可以做到相当于游戏中的存档和读档操作。

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

核心结论:每个进程的内存是相互独立、互不干涉的。这是为了保证系统的稳定性,例如某个进程代码出现bug(内存读写越界),那么该bug只会影响自己,不会影响其他进程。

但是也有例外,虽然说进程之间相互独立,但是有的时候需要多个进程相互配合完成某个工作。

记忆:每个人的房子相互独立,但是公园都是大家的公共空间,这两者是不冲突的。
 

4、线程(Thread)

进程频繁的创建和销毁时,会有非常大的开销,主要体现在资源的申请和释放上。为了解决这一问题,就引入了【线程】这个概念,相当于细分了进程

线程也可以称为“轻量级进程”,在进程的基础上做出了改进。

保持了独立调度执行,同时又省去了“申请资源”“释放资源”带来的额外开销。

5、进程和线程的总结

  • 进程是包含线程的,每个进程至少有一个线程存在,即主线程
  • 进程和进程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间(所以资源开销少,但会影响其他线程)。
  • 没有线程这个概念之前,进程是系统分配资源的最小单位,也是系统调度执行的最小单位。
  • 线程这个概念之后,进程是系统分配资源的最小单位,线程是系统调度执行的最小单位。
  • 一个进程挂了一般不会影响到其他进程,但是一个线程挂了, 可能把同进程内的其他线程一起带走(整个进程崩溃)。

正因为线程之间共用同一块内存空间,因此某个线程出现bug时,可能会影响到其他线程。
如何正确处理这些问题,是使用线程的一个难点

附上一个生动的理解图:

 【博主推荐】

【数据结构】二叉树的三种遍历(非递归讲解)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136044643?spm=1001.2014.3001.5501【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136030138?spm=1001.2014.3001.5501【数据结构】二叉搜索树的模拟实现-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/135910604?spm=1001.2014.3001.5501

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/389398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于DVWA靶场Could not connect to the database service的几种解决办法

总的来说这个问题都是 config 配置文件没有修改正确 一般修改数据库的用户名和密码与 phpstudy 一致并且添加了 key 就能初始化成功的 但是我还遇到过另一种情况,修改了上面的东西依旧无法连接到数据库 Could not connect to the database service. Please check …

猫头虎分享已解决Bug || ValueError: Found array with dim 3. Estimator expected <= 2.

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

记录一下,我使用stm32实现pwm波输入,以及对频率和占空比的计算,同时通过串口输出(stm32-timer capture)(实现-重要)

1,首先看下半物理仿真 看下我的配置: 看下计算方法以及matlab的仿真输出的数据: timer3的ch2是选择高电平,计算频率 timer3的ch1是选择的是低电平,用来计算周期 其中TemPIpre表示的是CH2输出的值, TemPI…

飞天使-k8s知识点18-kubernetes实操3-pod的生命周期

文章目录 探针的生命周期流程图prestop 探针的生命周期 docker 创建:在创建阶段,你需要选择一个镜像来运行你的应用。这个镜像可以是公开的,如 Docker Hub 上的镜像,也可以是你自己创建的自定义镜像。创建自己的镜像通常需要编写一…

H5大气的互联网建站服务公司静态HTML网站模板源码

H5大气的互联网建站服务公司静态HTML网站模板源码 源码介绍:一款大气的互联网建站服务公司/工作室静态HTML网站模板,带有多个单页,可自行二开作为工作室或公司官网。 下载地址: https://www.changyouzuhao.cn/13456.html

【初始C++】引用的概念及使用场景、引用与指针的区别、内联函数、类型推导关键字auto、范围for循环、指针空值nullptr

目录 1.引用 1.1引用的概念 1.2引用的特性 1.3使用场景 1.4引用与指针的区别 2.内联函数 2.1内联函数的概念 2.2内联函数的特征 3.auto关键字(C11) 4.基于范围的for循环(C11) 5.指针空值nullptr(C11&#x…

复习基础知识1

局部变量 写程序时,程序员经常会用到局部变量 汇编中寄存器、栈,可写区段、堆,函数的局部变量该存在哪里呢? 注意:局部变量有易失性 一旦函数返回,则所有局部变量会失效。 考虑到这种特性,人们…

【Python---内置函数】

🚀 作者 :“码上有前” 🚀 文章简介 :Python 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Python---六大数据结构 往期内容内置函数1.all()2. any()3.bin()4.complex()5.divmod()6.enumerate()7.…

用HTML5 Canvas创造视觉盛宴——动态彩色线条效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- 声明文档类型为XHTML 1.0 Transitional -…

windows@命令行映射磁盘驱动器若干方法@开机自动映射网络磁盘

文章目录 windows映射网络磁盘驱动器资源管理器中GUI方式创建命令行方式创建命令行列出驱动器列表删除取消映射持久化配置映射&#x1f47a;记住凭证 FAQ开机自启登录系统后自动挂载&#x1f47a;[以alist webdav 挂载为例]分析对策延迟挂载&#x1f47a;Note 访问已经挂载网络…

【C语言】简单贪吃蛇实现保姆级教学!!!

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 新年快乐呀小伙伴 引言&#xff1a; 小伙伴们应该都有一个做游戏的梦吧&#xff1f;今天让小庄来用C语言简单实现一下我们的童年邪典贪吃蛇&#xff0c;顺便巩固我们的C语言知识&#xff0c;请安心食用~ 文章目录 贪吃蛇效果一.游戏前工作…

uniapp 开发一个密码管理app

密码管理app 介绍 最近发现自己的账号密码真的是太多了&#xff0c;各种网站&#xff0c;系统&#xff0c;公司内网的&#xff0c;很多站点在登陆的时候都要重新设置密码或者通过短信或者邮箱重新设置密码&#xff0c;真的很麻烦 所以准备开发一个app用来记录这些站好和密码…

使用TinyXML-2解析XML文件

一、XML介绍 当我们想要在不同的程序、系统或平台之间共享信息时&#xff0c;就需要一种统一的方式来组织和表示数据。XML&#xff08;EXtensible Markup Language&#xff0c;即可扩展标记语言&#xff09;是一种用于描述数据的标记语言&#xff0c;它让数据以一种结构化的方…

《区块链公链数据分析简易速速上手小册》第1章:区块链基础(2024 最新版)

文章目录 1.1 区块链技术概览&#xff1a;深入探究与实用案例1.1.1 区块链的核心概念1.1.2 重点案例&#xff1a;供应链管理1.1.3 拓展案例 1&#xff1a;数字身份验证1.1.4 拓展案例 2&#xff1a;智能合约在房地产交易中的应用 1.2 主流公链介绍1.2.1 公链的核心概念1.2.2 重…

深入理解lambda表达式

深入理解ASP.NET Core中的中间件和Lambda表达式 var builder WebApplication.CreateBuilder(args); var app builder.Build(); app.Use(async (context, next) > { // Add code before request. await next(context);// Add code after request.}); 这段C#代码是用于设…

杨中科 .netcore 依赖注入

1.概念 概念 生活中的“控制反转”:自己发电和用电网的电。 依赖注入(Dependency Injection&#xff0c;Dl)是控制反转:(Inversion of Control&#xff0c;l0c)思想的实现方式。 依赖注入简化模块的组装过程&#xff0c;降低模块之间的耦合度 自己发电的代码 var connSetti…

Peter算法小课堂—哈希与哈希表

额……字符串我们是第一次学&#xff0c;给大家铺一些基础的不能再基础的基础&#xff0c; 字符串比较大小 字符串大小的比较&#xff0c;不是以字符串的长度直接决定&#xff0c;而是从最左边第一个字符开始比较&#xff0c;大者为大&#xff0c;小者为小&#xff0c;若相等…

HTTP缓存技术

大家好我是苏麟 , 今天说说HTTP缓存技术 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP缓存技术 HTTP 缓存有哪些实现方式? 对于一些具有重复性的 HTTP 请求&#xff0c;比如每次请求得到的数据都一样的&#xff0c;我们可以把这对「请求-响…

OpenHarmony—UIAbility组件生命周期

概述 当用户打开、切换和返回到对应应用时&#xff0c;应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调&#xff0c;通过这些回调可以知道当前UIAbility实例的某个状态发生改变&#xff0c;会经过UIAbility实例的创建和销毁&#xff0c;…

OS设备管理

设备管理 操作系统作为系统资源的管理者&#xff0c;其提供的功能有&#xff1a;处理机管理、存储器管理、文件管理、设备管理。其中前三个管理都是在计算机的主机内部管理其相对应的硬件。 I/O设备 I/O即输入/输出。I/O设备即可以将数据输入到计算机&#xff0c;或者可以接收…