当前位置: 首页 > news >正文

进程和线程概念和区别详解

JavaEE系列文章目录


在这里插入图片描述

💥 💥 💥如果你觉得我的文章有帮助到你,还请【关注➕点赞➕收藏】,得到你们支持就是我最大的动力!!!
💥 💥 💥

版权声明:本文由【马上回来了】原创、在CSDN首发、需要转载请联系博主。
版权声明:本文为CSDN博主「马上回来了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

在这里插入图片描述

🚀🚀🚀 新的知识开始喽🚀🚀🚀
在这里插入图片描述

文章目录

  • JavaEE系列文章目录
  • 1.进程
  • 2.线程
  • 3.调度
  • 4.进程和线程
  • 4.面试常考


1.进程

进程就是在硬盘里的可执行文件被CPU读取并且运行起来的文件.

进程和进程之间是相互独立的,通过专门设备MMU来构建虚拟地址空间映射到实际的物理地址空间,如果进程访问的地址不在该进程范围内,为了不影响其他进程,MMU会将通知进程(比如把该进程杀死).

进程之间是相互独立的,存在隔离性,如果是进程间的相互访问,引入一个新机制,进程间通信,无论是哪种进程间的通信,核心原则相同:找到一个多个进程都能访问到的公共资源,然后基于公共资源来交换数据.

操作系统如何管理进程?
1.通过pcd结构体来描述进程说包含的信息
2.通过双向链表的数据结构来组织
pcb描述进程的信息有哪些?
1.pid
一串数字,同一个主机同一时刻,进程的唯一表示
2.内存指针
为进程开辟内存空间 ,描述进程持有的内存资源
3.文件描述附表
每个进程都可以打存在硬盘上的文件,文件描述符表就记录了这个进程打开了哪些文件,描述进程持有的文件资源
下面几个信息与进程调度有关
4.进程状态
①就绪状态,如果CPU没被占用满,可直接执行
②阻塞状态,当前无法被CPU执行
5.进程优先级
在这么都进程里,操作系统根据优先级来个每个进程调用安排时间,创建进程时,可以通过系统调用来干预优先级(在进程优先级一样高的情况下)
6.进程上下文
对于CPU来说,上下文就是CPU寄存器里的值,进程在CPU上执行了一会儿,切换到别的进程执行就需要保存当前进程的信息(存档),下次有调用该进程的时候接着上次没执行完的进程继续执行
7.进程记账信息
记录进程执行了多少条执行,避免一些进程完全无法分配到cpu

2.线程

一个进程默认包含一个线程,也可以包含多个线程,对于多线程的应用程序,每个线程都可以执行特定的任务,提高了CPU的使用效率.

3.调度

CPU的资源非常有限,一个CPU(单核)在某一时刻只能运行一个进程,这个进程执行结束了才能执行下一个进程(并发执行),但是我们的电脑上实际运行的进程很多甚至上百,那么是怎么实现的能够"同时"实现多进程的呢?

CPU的集成程度(单位面积内的组件数量)决定了CPU的工作效率,但是截至到目前,CPU已经达到了5nm的制程,想要进一步提高制程比较困难,因此就把多个CPU焊在同一块板上,这样多核cpu就诞生了,多核CPU可以同时执行多个进程(并行执行).

结合上面提到的进程调度相关的信息,这就可以解释为什么我们的计算机可以"同时并发"的执行多个进程了,这里"同时并发"是指宏观上的"并发+并行",因为CPU的运算速度极快,就算是单核CPU的并发执行,在多个进程间切换,人类肉眼无法察觉到,再加上CPU多核的并行执行,所以多核CPU实际上是以并发+并行的方式管理者进程,而且我们也无法知道是并发执行的多些还是并行执行的多一些,这就是为什么电脑上执行的进程数往往大于CPU的内核数的原因.

4.进程和线程

系统的调度已经实现了多进程,但是在某些情况,频繁的创建进程和销毁进程非常的消耗时间(给进程分配内存空间和销毁进程的内存空间极大)的影响了CPU的使用效率,因此在这个基础上线程就诞生了.

进程是操作系统分配资源的基本单位
线程是操作系统调度的基本单位

一个进程包含了一组PCB,每个PCB都包含了一个线程,这些线程共用该进程执行的内存资源和文件资源,每个线程都是一个"执行流",可以单独在CPU上进行调度.
因此描述进程的相关信息其实也是在描述线程,CPU在实现多线程时,实际上某一个时间段是执行改进程里的某个线程,对于多CPU则可以同时执行该进程里的多个线程.
多线程极大的提高了CPU的使用效率,只有在第一次创建线程时才会申请资源空间,后续在创建新的线程都是共用的同一份资源(节省了申请资源的开销),在销毁最后一个线程时,才会真正释放资源,前面的线程销毁都不必释放资源.

4.面试常考

进程和线程的概念和区别?
1.正在运行的程序叫做进程
2.进程包含线程,线程比进程更轻量,创建更快,销毁也更快
3.同一个进程的多个线程之间共用同一份内存/文件资源,进程和进程之间则是独立的内存/文件资源
4.进程是资源分配的基本单位,线程是调度执行的基本单位



🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏

在这里插入图片描述

🌔 🌔 🌔下次见喽🌔 🌔 🌔
在这里插入图片描述

相关文章:

  • “竞速”智能网联汽车,领头雁为何是长沙?
  • 程序员必须要懂的首字母大写规范
  • C primer plus学习笔记 —— 7、字符串
  • 【我的OpenGL学习进阶之旅】当你运行OpenGL程序的时候,程序并不绘制任何内容,并且白屏和黑屏的时候怎么排查?
  • 【Node.js项目】大事件项目:后台架构图(含具体技术栈)、典型代码
  • Connor学Android - JNI和NDK编程
  • DOM 重点核心
  • 基于Python、wxpython的高校教务系统设计与实现
  • python的安装教程
  • DDD 洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道
  • Android 进阶——系统启动之SystemServer创建并启动PackageManagerService服务(十一)
  • JavaScript之document对象最常用相关知识总结
  • SpringBoot 临时属性、4种配置文件级别、自定义配置文件
  • 分布式事务(五)———可靠消息队列解决方案
  • Spring IOC概念与实现(注解方式)
  • php的引用
  • ES6指北【2】—— 箭头函数
  • C学习-枚举(九)
  • iOS小技巧之UIImagePickerController实现头像选择
  • Less 日常用法
  • Mithril.js 入门介绍
  • PAT A1092
  • Python进阶细节
  • Webpack 4 学习01(基础配置)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 好的网址,关于.net 4.0 ,vs 2010
  • 和 || 运算
  • 记一次用 NodeJs 实现模拟登录的思路
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 为视图添加丝滑的水波纹
  • 我是如何设计 Upload 上传组件的
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (4)logging(日志模块)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Matlab)使用竞争神经网络实现数据聚类
  • (阿里云万网)-域名注册购买实名流程
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (分布式缓存)Redis持久化
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (六)c52学习之旅-独立按键
  • (论文阅读40-45)图像描述1
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (全注解开发)学习Spring-MVC的第三天
  • (十一)图像的罗伯特梯度锐化
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET中两种OCR方式对比
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @test注解_Spring 自定义注解你了解过吗?