当前位置:首页 > 单片机 > 架构师社区
[导读]计算机的核心是CPU,它承担了计算机的所有计算任务,CPU就像一个工厂,时刻在运行着,而操作系统管理着计算机,负责任务的调度、资源的分配和管理。 图片来源于网络 进程和线程都是计算机操作系统中的基本概念,在进程和线程之上有程序,应用程序是具有某种功

计算机的核心是CPU,它承担了计算机的所有计算任务,CPU就像一个工厂,时刻在运行着,而操作系统管理着计算机,负责任务的调度、资源的分配和管理。

写给小白看的线程和进程,高手勿入
图片来源于网络

进程线程都是计算机操作系统中的基本概念,在进程和线程之上有程序,应用程序是具有某种功能的程序,运行在操作系统中。

例如,我们的桌面上都会安装QQ、酷狗音乐、微信......等,这些就是程序。当我们点击QQ运行时,QQ正常运行,此时就会开启一个进程。

因此,「程序是静态的,而进程是动态的,程序是作为进程的运行的载体,进程会随时间,会在某一时刻消亡。」

写给小白看的线程和进程,高手勿入
图片来源于网络

我们运行程序开启的进程,我们可以在任务管理器中可以查看,当我们再次点击QQ,登陆另一个账号的时候又会开启一个进程。

写给小白看的线程和进程,高手勿入

打个比喻:前面我们把CPU比作一个工厂,那么程序就好像工厂里面的车间。

写给小白看的线程和进程,高手勿入
图片来源于网络

但是,车间是静态的,车间中有多条流水线,进程就好比流水线,流水线是动态执行的,一个车间可以同时运行多条流水线,也可以只执行一条流水线或者一条流水线都不执行。

总结来说:「程序可以包含多个进程,多个进程并发执行,相互独立,因此,进程也是系统进行资源分配和调度基本单位。」

当然,程序也可以没有启动进程,就好比车间中没有流水线,因为程序是静态的,而进程的有无就好比层间的流水线是否存在。

写给小白看的线程和进程,高手勿入
图片来源于网络

一条流水线上可以有很多工人,那些工人就好比是线程,一个员工就代表一个线程,他们在一起共同协作,完成一条流水线上的任务。

写给小白看的线程和进程,高手勿入
图片来源于网络

所以,「进程与线程的关系是包含关系,一个进程中至少有一个线程,或者多个线程,一个线程只能归属于一个进程中」。就好比一个车间中可以有多个流水线,一条流水线上有多个功能开工,在组长安排下工人只能在一条流水线上工作。

写给小白看的线程和进程,高手勿入
图片来源于网络

当然,进程中的所有线程共享这该进程的所有资源,比如:内存空间,每个线程都可以使用这个内存空间。就好比车间中的空间都是各条流水线共享的。

写给小白看的线程和进程,高手勿入

不同的空间若能容纳的工人也不一样,就好比厕所一次只能一个人进厕所,当后面来的人,注意到厕所门已经关闭,就知道里面有人,就只能等候前一个人用完,他才能用。

厕所里面的人,为了防止他人再次进入厕所,就会把厕所锁住,这就是「互斥锁(Mutual exclusion,缩写 Mutex)」,这就意味着在进程中的某一些空间一次只能由一条线程使用。

写给小白看的线程和进程,高手勿入
图片来源于网络

有些空间就会比较大,一次可以供多个人使用,比如:休息室,休息室的座位都是有限的,一次只能供20的座位休息,其余的人就坐不下了。

写给小白看的线程和进程,高手勿入

用于标识这个空间仅给20个人使用的办法就是给每个座位打一个编号1-20,每进去一个人就给这个人发一个作为编号,当编号用完了,表示这个空间已经满了。

写给小白看的线程和进程,高手勿入
图片来源于网络

当有人出来了就会把编号还给看守的那个人,便是又有空间可以使用了,这个做法就是「信号量」,这样保证了每个人都有自己的座位,即保证多线程不会相互冲突。

「那为什么有进程还要多线程呢?」 每个进程都有自己独自的代码和数据空间,即为「程序的上下文」,进程包含多个线程,进程的切换消耗要大于线程的切换消耗。

写给小白看的线程和进程,高手勿入
图片来源于网络

线程可以看作是轻量级的进程,每个线程也有自己的「运行栈」「程序计数器(PC)」、以及「线程的本地存储」,所以对于进程数比较多的,频繁的切换进程将会带来一大笔的开销,反而线程的切换开销小。

写给小白看的线程和进程,高手勿入
图片来源于网络

进程是一个「动态」的概念,进程包含下面的五种状态:「初始态,执行态,等待状态,就绪状态,终止状态」

写给小白看的线程和进程,高手勿入
图片来源于网络

线程中的状态也是包含下面的五种:「新建(NEW)、可运行(Runnable)、运行(Running)、阻塞(BLOCKED)、死亡(DEAD)」

写给小白看的线程和进程,高手勿入
图片来源于网络

那么进程之间是怎么交互的呢?在进程之间的通信包括「管道、系统IPC(包括消息队列,信号量,共享存储), SOCKET。」

管道的方式由包括以下三种方式:

  1. 「普通管道」 PIPE:通常会有限制,可能是半双工方式,或者是只能在子父进程中使用。
  2. 「流管道」 s_pipe:可以使用双向传输。
  3. 「命名管道」 name_pipe:它允许可以在不相关的进程之中使用。

线程之间的通信在JMM模型中是通过共享内存来实现的,例如:线程一要和线程二通信,线程一先把自己的变量副本写入主内存中,然后线程二再从主内存中读取该变量,复制到自己的线程空间中进行操作,线程都不能直接操作主内存。

写给小白看的线程和进程,高手勿入

为了保证多线程之间的数据一致性的问题,可以使用锁机制,实现线程之间的操作的同步、有序。例如:「synchronized锁、Lock锁、Atomic原子类」

单线程时代,一次只能执行一个任务,后面的任务只能排队等候,实现的方式都是串行化的,随着后续的发展为了提高效率,实现了多线程。

单CPU的多线程方式,实现的是并发方式,并发真正意义上的并行,因为CPU一次只能执行一次任务,但是,CPU的执行速度远快于线程的执行速度,为了充分利用CPU,因此实现并发的多线程方式。

写给小白看的线程和进程,高手勿入
图片来源于网络

多CPU时代的来领,实现真正意义上的并行多线程,同一时刻可以由多个线程的执行。

写给小白看的线程和进程,高手勿入
图片来源于网络

最后总结:「操作系统中是以多进程的形式执行,以多线程的方式执行,允许讲单个任务由多个部分执行,并且在多线程之间能够提供协调机制,允许进程之间、线程之间有共享的部分,又能够保证进程之间、线程之间不会相互影响」

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

写给小白看的线程和进程,高手勿入

写给小白看的线程和进程,高手勿入

写给小白看的线程和进程,高手勿入

长按订阅更多精彩▼

写给小白看的线程和进程,高手勿入

如有收获,点个在看,诚挚感谢

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭