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

目录

一、什么是进程

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

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

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

相关推荐
鲸沉梦落12 小时前
JVM类加载
java·jvm
carry杰12 小时前
esayExcel导出图片
java·easyexcel 图片
Victor35612 小时前
Redis(138) Redis的模块如何开发?
后端
蓝天智能12 小时前
立体字型效果的Qt QSS实现
开发语言·qt
艾莉丝努力练剑12 小时前
【C++:哈希表】从哈希冲突到负载因子:熟悉哈希表的核心机制
开发语言·c++·stl·散列表·哈希表·哈希·映射
Victor35612 小时前
Redis(139)Redis的Cluster是如何实现的?
后端
路人甲ing..12 小时前
Android Studio 快速的制作一个可以在 手机上跑的app
android·java·linux·智能手机·android studio
虾..12 小时前
C++ 特殊类的设计
开发语言·c++
心灵宝贝13 小时前
Mac 安装 JDK 8u281(JDK-8u281-1.dmg)详细步骤(附安装包)
java·macos·intellij-idea
記億揺晃着的那天13 小时前
从单体到微服务:如何拆分
java·微服务·ddd·devops·系统拆分