【线程与进程的区别和联系】

目录

一、什么是进程

在此之前我会将这两者之间的相关的概念都进行介绍,相关的问题都进行解释,希望我们都可以达到进步

1. 操作系统

  1. 计算机可以分为硬件,操作系统,应用程序,用户。
  2. 其中的硬件主要是:输入/输出设备,内存等
  3. 应用程序:编译器、浏览器等按照哪一种的方式来使用这些资源解决用户的计算相关的问题
  4. 操作系统:计算机当中最重要的"软件"之一
  5. 当代的主流的操作系统分为Windows 11/10;Linux
    最主要的区别是:这两种主流操作系统的系统函数是不一样的

eg:

Windows 11/10 当中的系统函数如

#include < Windows >

里面有我们常用的Sleep()函数;他的单位是ms

Linux当中的系统函数

#include < unistd.h >

sleep()单位为s

程序员一般使用Linux,主要操作的方式是通过命令行(文本)的方式,而Windows系统是一种图形界面操作(不需要会很多的命令,入门的级别是比较低的)

注:
市场当中的嵌入式设备:采用的是Linux主系统
Mac OS:苹果电脑上的系统
手机端使用的是:IOS
Android:是当前市面上最多的系统

上述系统之间是互不相容的

对Java兼容性进行简单解释:

虽然上述的操作系统之间是互不相容的,但是"一经编写,到处运行"主要是因为:

Windows系统当中有Windows JVM

Linux有Linux JVM

只是上述的程序是不一样的,但是底层的java支持的字节码是相同的
所以如果想要新的操作系统实现java代码,是需要在其底层继续实现他的相关的JVM

操作系统的作用

管理各种的硬件设备
操作系统通过驱动程序,间接管理硬件设备

驱动程序:提供一个稳定的运行环境,使每一个app都可以互相不干扰进行运行

操作系统当中重要的概念:进程(process)是一个运行起来的程序


2.操作系统是怎样管理程序的

描述一个进程

使用结构体对进程进行描述------描述出进程的核心属性

这里的结构体------ 进程控制块(PCB)

再将多个进程进行组织

相关的过程:

  1. 创建一个新的进程:创建一个PCB,初始化PCB当中各个属性,将PCB加到相关的数据结构当中
  2. 销毁一个进程:将进程在该数据结构当中找到,并进行销毁,从其中进行删除
  3. 查看进行列表:遍历数据结构取出元素信息,将其显示在界面上

进程控制快(PCB)关键信息

  1. pid(进程id)进程的身份标识符(同一时刻的pid不可能相同)
  2. 内存指针:双击一个exe文件,运行一个程序创建一个进程(可以保证找到需要执行的指令在哪里,依赖的数据在哪里)注:exe文件是程序员在写代码的时候生成的一个二进制的文件,将这个二进制文件最终存储在这个文件当中

操作系统将exe文件中的指令与数据读取,加载在内存当中,后续运行的时候,从指令内存区域里一条一条取出并进行执行
需要注意的是:操作系统本身就是一个文件,也是由一条一条的指令构成的,CPU就会依次执行操作系统上的这些指令
进程是很依赖内存的

  1. 文件描述符表
    进程运行过程当中也是需要与硬盘(以文件的形式进行管理)进行交互的,进程在读写文件的时候,需要先"打开文件",将文件信息保存在文件描述符当中,表中的项就对应了打开的文件的部分
    操作系统当中将很多都抽象成文件:eg:网卡
  2. PCB的进一步属性
    a. 进程装态
    定制时间表,按照时间表进行执行
    >就绪状态:随时可以进行使用该exe文件
    >阻塞状态:eg:进程当前不适合在CPU上执行,需要对时间表进行重排
    b. 进程优先级
    有些进程的优先级会更高
    eg:在打游戏的时候如果开启了禁止推送消息的情况;则此时就是游戏的优先级是高于其他的
    c. 进程的上下文
    进程调度:可能会出现CPU这会在执行这个进程但是之后又消失了一段时间,再后来来到这个进程的时候,会沿着上次的状态进行执行
    由于CPU当中的集存器存了当前的进程的中间状态
    d. 进程的记账信息
    相当于是一个统计的功能;统计每一个进程在CPU上运行多久【对程序员查找相关的信息提供了一个便利的信息】

二、什么是线程

提出原因:

需要解决一个服务器可能需要同时给很多的客户端进行提供服务且运行的速度以及分配资源的问题需要进行处理,在此时引入了线程的思想
线程:是一个轻量级【创建,销毁需要的资源是比较小】

在一定程度上线程是操作系统分配资源的基本单位

一般进程当中包含多个线程

其中要分配的资源是:内存、硬盘(文件描述符表)等

线程的工作

  • 对于线程来说第一个线程创建的时候需要进行资源的申请,后续在创建线程,并不涉及申请资源的操作
  • 只有所有线程都销毁的时候才是真正的释放资源,运行中销毁某个线程并不会释放资源

三、线程与进程之间的关系

线程与进程之间的关系:

两者 创建 销毁 与PCB之间的关系 相互关系
线程 只需要第一次创建的时候申请资源,后续再创建线程,不涉及资源申请操作 只有所有的线程都销毁的时候才能够真正释放资源 与进程共用一个文件描述符表和内存指针,以及上述的上述的进一步属性他都有 线程之间是会出现影响的,争夺资源的情况
进程 申请资源 释放资源 PCB是描述进程的属性,PCB当中的所有的情况他都有 进程之间不会出现任何影响,保证了彼此之间互不影响处理任务

上述是对这两者进行的一个简单解释

相关推荐
楚兴1 小时前
MacBook M1 安装 OpenClaw 完整指南
人工智能·后端
JavaGuide1 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
吃虫子的人1 小时前
记录使用Arthas修改线上源码重新加载的一次过程
java·arthas
一晌小贪欢2 小时前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
Java编程爱好者2 小时前
2026版Java面试八股文总结(春招+秋招+社招),建议收藏。
后端
阿猿收手吧!2 小时前
【C++】异步编程:std::async终极指南
开发语言·c++
朱昆鹏2 小时前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
REDcker2 小时前
gRPC开发者快速入门
服务器·c++·后端·grpc
figo10tf2 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端