程序、进程、线程汇总(概念篇)

引入

众所周知,程序、进程和线程这三个概念相辅相成,据说也是面试的一大热点,既然如此,笔记中就应该有它们三个的身影。

定义

一、程序

程序是存放在存储介质上的一个可执行文件。

二、进程

进程是程序的执行实例,是一个正在运行的程序,是动态的,有它自身的产生、存在和消亡的过程,这个过程称之为“生命周期”。

三、线程

线程是进程中的独立控制流,由环境(包括寄存器组和程序计数器)和一系列的执行指令组成。

小结

1.程序是静态的,而进程是动态的;
2.程序是一些指令的有序集合,而进程是程序执行的过程;
3.程序只有一个静态的状态,而进程的状态是变化的,其包括进程的创建、调度和消亡;

说白了,程序就是存在存储介质中的一堆数据和代码,当它运行起来的时候就是进程,而运行中的程序(进程)又会有一些状态,比如:挂起,等待,就绪,运行等待,这些先简单了解。打开电脑上的任务管理器就会看到很多运行中的程序,也就是进程,(看图)
在这里插入图片描述
右边CPU一列数据不停变动,说明CPU在管理进程,旁边有内存和磁盘等数据,说明CPU在给进程分配资源;但进程还不是CPU进行调度,资源分配和执行的最小单位哦!
那是啥?先不说。

区分了程序与进程,再粗略谈谈个人对线程的理解。进程进一步细化就是线程,线程是进程内部的一条执行路径。说白了,线程就在进程里边呗,进程是树,线程就是分支,有的负责往上长,有的负责往两边长,但总会有主干,程序里的main函数姑且理解为主干。

我们都用过一些杀毒软件,这里以金山毒霸为例:
当它没有运行的时候,它就是个静态的程序,当我们启动它时,CPU便调度它,并给它分配一些资源让它执行,这时候它就成为了进程,那线程呢?看图
在这里插入图片描述
回想一下,自己有没有在让它进行闪电查杀的时候,同时点击垃圾清理,电脑加速等等,反正小帆只要打开它,这几个选项都挨个点名,这每一个功能就可以理解为一个线程,共享着CPU分配给金山毒霸进程的那些资源(当然每个线程也有属于自己的程序计数器,寄存器组以及栈),分别实现着自己负责的功能;当进程结束的时候,这些线程是不是就自然而然的不能运行了,所以说,线程是依赖于进程而存在的,唇亡必然齿寒。既然是共享资源不就存在着资源争夺的问题么,这就出现了后面要学习的线程安全问题。两个线程同一时刻都想用唯一的某个资源,处理不好不就出现问题了么,解决的方法就是后面学的互斥锁、信号量,简单提一下。既然进程都能被CPU调度,线程自然也是归CPU调度,所以线程才是CPU调度、资源分配和执行的最小单位!

了解完这三个概念,再说说CPU。
我们都知道CPU就像人类的大脑,可以运行很多程序,比如:我们听着QQ音乐还能打游戏,这俩是同时运行,但CPU就只有一个,怎么就能让好几个进程同时运行了呢?其实说白了这是个错觉,CPU其实是调用一个进程运行一段时间,再调用另一个进程运行一段时间,这里的“一段时间”称之为“时间片”,之所以有错觉,是因为时间片极短而已,给人感觉是同时运行,就像很早以前看的那种卷带的幕布电影一样,卷带里都是一张接一张的图片,只不过播放的时候,速度比人的视觉处理功能快,大脑处理不过来了,才会有动态体验。CPU执行进程也是这样,是因为它切换频率快到让你反应不过来,误以为多个进程是由多个CPU各自执行而引起的并行,其实是由一个CPU快速切换而引起的并发,如果你感觉不出来,可以疯狂打开一堆程序,这时候电脑多少会有些卡,因为任务多了,CPU来回切换的速度就慢了。
这里的一个CPU(采用时间片)同时执行多个任务,就称之为并发;
而多个CPU同时执行多个任务,就称之为并行;
直觉上的并行实则是视觉上的并发。
总而言之,程序运行起来成为进程后,可能具备很多功能,但一个进程同一时间也就只能实现一种功能,如何让进程实现真正的所有功能上的并行呢?这不就引出了线程么,每个功能都分配一个线程,让所有线程共享进程自己的资源而运行,多个线程同一时间实现多个功能,就达到了并行效果。所以,线程的特点自然而然可以被总结,它将功能复杂的进程分成多个线程独立运行,能提高应用程序的响应和执行效率,用更短的时间实现所有功能,提前释放CPU,提高CPU的利用率。

结束

此篇小帆用于笔记整理,内容仅供参考,如有错误,望大佬指点

发布了3 篇原创文章 · 获赞 0 · 访问量 22

猜你喜欢

转载自blog.csdn.net/qq_43711326/article/details/105454360
今日推荐