多线程的初步了解---进程与线程

在我们日常使用的计算机中,我们在任务管理器界面会看到进程这个在菜单栏的字眼,在绝大多数情况下,关闭进程就是关闭程序这个我相信大家对此都已经有所了解,那么这个进程究竟是什么以及它和线程之间有什么关系,让我们来对此进行探讨

1.什么是进程

其实听名字也能够顾名思义,进程就是一个程序正在执行的过程,相当于是一个程序运行的容器,程序运行所需要的文件都在进程中,进程是系统分配资源的最小单位, 相当操作系统分配了一块地给这个程序,告诉他你就在这块地上整理好你的东西干你的事情,进程在开启之前需要向系统索要资源的,这样才能开启一个进程,进程之间是可以有父类关系的,一个进程可以是父进程也可以是子进程

2.什么事线程

线程听起来好像和进程差不多,难道是一个意思吗?很明显答案是不是,那线程到底是什么呢?其实线程和进程之间是包含与被包含的关系,在一个进程中可以有多个线程,线程是系统调度的最小单位, 线程才是真正干活的人,线程是一个执行者,会执行自己的那份代码,在我们平时写的代码中,一个main就是一个线程,也是主线程,在一个进程中可以有多个线程,但也会有一个主线程,但这个并不是进程之间的那种父子关系,,线程中没有子线程和父线程的这种说法

3.进程与线程之间的区别和联系

在上面我提到过这两是包含我与被包含的关系,一个进程中正常会有多个线程,如果只有一个线程的话,那么这个线程也就是进程是否结束的唯一变量了,为了我们更好理解线程与进程之间到底是什么关系以及他们到底在干什么样的活,我给大家举一个通俗易懂的例子,**我们可以把操作系统当成一个工厂的大老板,然后把车间当做成一个进程,这个车间就是进程向操作系统也就是老板要来的一块空间,假设这个车间只有一个工人,这就是单线程,这个工人下班了,那么这个车间就关闭,但是如果工作量变多,一个工人干不过来怎么办?这时候我们就可以多找几个工人来一起干活,这样不就可以提高效率了吗?那么这就是所谓的多线程,当一个工人下班而还有工人没下班的话这个车间可以关闭吗?那很显然不可以,**这就是进程与线程之间的关系,这两的核心关系:进程负责申请资源,线程负责在申请来的资源中执行

补充

我在这里呢还想喝大家分享一下进程到底申请了什么资源以及操作系统到底扮演了什么角色,我说完或许大家对进程与线程的了解会更加深刻,在上面的比喻中我把操作系统比作是大老板,我为什么会这样比喻呢?因为进程申请的资源都是向操作系统申请的,操作系统会分配资源给他,操作系统给了程序运行的环境,然后操作系就分配CPU算力,内存和硬盘等等,你只需要告诉操作系统你需要什么就会给分配好,然后给进程之后,线程开始干活,对于进程索要的资源中当然还有很多比如GPU(显卡),这个和我上面说的三个还不太一样,有兴趣的话大家自行了解,我就不过多赘述了

结语

对于进程和多线程的概念以及二者的关系还是比较重要的,在面试中被问到对频率也是比较高的,希望大家可以多了解以及能够记忆,这个多后续学习多线程也会有帮助

相关推荐
喵本喵叁肆20 分钟前
Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))
开发语言·r语言
SimonKing1 小时前
Workbuddy太占C盘空间了,写个迁移工具迁走10G的数据
java·后端·程序员
Hvitur1 小时前
Java - Lambda
java·开发语言·python
xiaoye-duck1 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
Evand J2 小时前
【MATLAB例程,PMSM19】永磁同步电机(PMSM)基于多速率无迹卡尔曼滤波(UKF)的转速与转子位置估计。测量缺失、状态预测与恢复性能分析
开发语言·matlab·电机·ekf·卡尔曼·电机滤波
喵了几个咪2 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
开发语言·人工智能·后端·golang
꧁细听勿语情꧂2 小时前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫3 小时前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++
apcipot_rain6 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵11 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程