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

目录

一、什么是进程

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

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当中的所有的情况他都有 进程之间不会出现任何影响,保证了彼此之间互不影响处理任务

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

相关推荐
蜡笔小新星2 分钟前
Flask项目框架
开发语言·前端·经验分享·后端·python·学习·flask
IT猿手4 分钟前
2025最新群智能优化算法:海市蜃楼搜索优化(Mirage Search Optimization, MSO)算法求解23个经典函数测试集,MATLAB
开发语言·人工智能·算法·机器学习·matlab·机器人
计算机学姐6 分钟前
基于Asp.net的驾校管理系统
vue.js·后端·mysql·sqlserver·c#·asp.net·.netcore
欢乐少年19042 小时前
SpringBoot集成Sentry日志收集-3 (Spring Boot集成)
spring boot·后端·sentry
夏天的味道٥3 小时前
使用 Java 执行 SQL 语句和存储过程
java·开发语言·sql
IT、木易4 小时前
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
开发语言·前端·javascript·ecmascript
冰糖码奇朵5 小时前
大数据表高效导入导出解决方案,mysql数据库LOAD DATA命令和INTO OUTFILE命令详解
java·数据库·sql·mysql
好教员好5 小时前
【Spring】整合【SpringMVC】
java·spring
Mr.NickJJ5 小时前
JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件
开发语言·javascript·react.js
浪九天6 小时前
Java直通车系列13【Spring MVC】(Spring MVC常用注解)
java·后端·spring