进程线程协程是什么意思(线程和协程的理解以及它们的区别)
进程线程协程是什么意思(线程和协程的理解以及它们的区别)
2024-07-05 03:27:04  作者:永恒的诺言  网址:https://m.xinb2b.cn/know/fei233298.html
一、进程#

先来了解一下操作系统的进程:

操作系统对正在运行程序的抽象,这个就是进程(process)。

比如运行一个 web 浏览器,一个 text 文本,都是运行的一个一个进程。

有的人说:进程是程序运行资源的集合。进程是系统资源分配的最小单位等等。

从静态的角度来说,进程确实是运行程序的各种资源集合。

如果你进一步思考,进程里的各种资源都有哪些呢?如下图所示:

进程线程协程是什么意思(线程和协程的理解以及它们的区别)(1)

(图1:进程资源)

内存管理相关

文件系统

调度相关

信号处理

内核栈

进程各种状态

进程运行时统计信息

进程标识

等等。

可以看出,进程中的资源是相当多的。

从 Linux 操作系统对进程的定义也可以看出。我以前对进程结构 task_struct 分析文章:Linux进程: task_struct结构体成员

多进程:操作系统有多个程序运行,那么就有多个进程,如下所示简图:

进程线程协程是什么意思(线程和协程的理解以及它们的区别)(2)

​ (图2:多进程简图)

二、线程#2.1 什么是线程?#

《操作系统设计与实现》里说:

在传统操作系统中,每个进程中只存在一个地址空间和一个控制流(thread)。

然后,有些情况下,需要在相同地址空间中有多个控制流并行的运行,就像他们是单独的进程一样(只是他们共享相同的地址空间)。

这些控制流通常被称为线程(thread),有时也称为轻量级进程(lightweight process)。

尽管线程必须在进程中执行,但是线程和进程是可以分别对待处理的两个概念。进程用来集合资源,而线程是 CPU 调度的实体。

线程给进程模型增加的是,允许在同一个进程环境中有多个执行流,这些执行流在很大程度上相对独立。

也即是说,在进程中,程序执行的最小单位(执行流)是线程,可以把线程看作是进程里的一条执行流。

一个进程里可以有一条或多条线程。

进程线程协程是什么意思(线程和协程的理解以及它们的区别)(3)

​ (图3:进程里的线程)

2.2 为什么会有多线程?#

在一个应用程序执行过程中,应用程序里可能会有多种事件执行。

而有些事件执行一段时间后可能会被阻塞。如果把应用程序执行事件分解成多个并行运行的线程,即可以让程序设计变得简单,如果有阻塞的,

可以把这部分让出行换其他线程执行。

还有一个原因是:

线程比进程更轻量级。所以线程比进程更加容易创建,销毁。

第三个跟第一个有点关系,是关于性能的,若多线程都是 CPU 密集型的,那么不能获取性能上增强。如果有大量计算和大量 I/O 处理,那么

多线程就可以获取性能上的优势,因为允许多线程重叠执行。

多线程的缺点:

对于多线程来说,进程中的资源是共享的,所以会产生资源竞争。当进程中的一个线程崩溃了,会导致这个进程里的其他线程也崩溃。所以有时多进程程序更好,一个进程崩溃不会导致其他进程也崩溃。

三、进程与线程区别#

从上面进程和线程介绍知道,线程是程序执行流的最小单位,进程是操作系统分配资源的单位。

进程与进程之间关系:

进程与进程之间是相互独立的。

线程与进程关系:

线程是进程里的执行流,进程里的线程可以是一个,也可以是多个。

所有线程共享进程里一些资源,比如代码,数据,地址空间,信号处理,打开文件,全局变量等。

同时,线程也有自己的寄存器,程序计数器,堆栈,线程状态等

进程线程协程是什么意思(线程和协程的理解以及它们的区别)(4)

​ (图4:进程与线程关系)

四、协程#

协程是建立在线程之上,一般是语言级别的 ”多线程“ 模型,比线程更加的轻量级。有的叫它微线程。它是完全运行在用户态里。

协程是在线程之上在进行抽象,它需要线程来承载运行。一个线程可以有多个协程。

比如 Go 语言的 goroutine,它用一个关键字 go 就可以运行一个协程程序。

在 Go 语言里面,协程是由 Go 提供的 runtime 来控制和调度。

协程的优点:

协程栈很小,只有几KB,而线程栈是 1 M,对比起来,创建大量协程需要的内存更少。协程的调度是语言提供的 runtime 来调度,是在用户空间直接调度,不需要在内核空间和用户空间来回切换,浪费效率。能更好的利用 cpu 的多核,提高程序执行性能。避免阻塞,如果协程所在的线程发生了阻塞,那么协程调度器可以把运行在阻塞线程上的协程,调度到其它没有发生阻塞的线程上,继续运行。五:协程与线程区别#协程是运行在线程之上,一个线程可以有多个协程。就像一个进程里可以有多个线程一样。协程能更好的利用多核机制。比如 Go 协程可以控制运行在多少个 CPU 的核上。协程是在用户空间完成调度,由语言提供的 runtime 进行调度完全用户态。线程由内核调度。协程使用内存更小。

文章来自https://www.cnblogs.com/jiujuan/p/16193142.html

  • 大多数人误解的唯心主义 我思故我在其实没有错
  • 2024-07-05大多数人误解的唯心主义 我思故我在其实没有错2005年,李敖在北大演讲说:“我认为马克思是唯心论者”李敖为什么说马KS是唯心论者?唯物主义和唯心主义到底有什么区别?过去,我们读书时嘲笑“唯心主义”是错误的,幼稚的,不科学的脑子有问题的想法;但是。
  • 徐州有几个城北学校(什么这所宇宙东)
  • 2024-07-05什么这所宇宙东7月23日,徐州市自然资源和规划局将徐州市第三十中学项目规划和徐州市矿山路第二小学扩建项目用地的预审意见公示徐州市第三十中学项目徐州市第三十中学位于郭庄路北侧,兴云路东侧,幸福里南侧30中学,位于郭庄。
  • 自制鲜玉米粥的做法(自制鲜玉米粥的做法介绍)
  • 2024-07-05自制鲜玉米粥的做法介绍用料:鲜玉米1穗、清水适量、糖适量把玉米叶、玉米须去掉,洗净玉米玉米用切菜器擦出玉米浆碎擦好的玉米碎收到碗中备用锅中加适量清水,水烧开后再倒玉米碎,不停地用勺子搅拌,防止糊锅开锅后煮2—3分钟即可热乎。
  • 十大最有名的冷饮(原来老宁波的传统冷饮)
  • 2024-07-05原来老宁波的传统冷饮/老底子,宁波夏季的果冻状冷饮是啥?/可能相当部分人的答案会是“木莲冻”那你能区分下面两张图分别是什么吗?答案:石花凉粉(左)木莲冻(右)在宁波,这种果冻状的冷饮通常被称为“石花”是凉粉的一种石字在这。
  • 邮编输入(固话邮编巧输入)
  • 2024-07-05固话邮编巧输入完整的固定电话有区号,邮政编码有统一的位数,在用Excel做统计表时,对其的输入是有技巧的,下面就跟着小德子学起来吧~一个区域内的固定电话的区号是相同的,在做统计表时,可以利用公式节省输入数据的时间;。
  • 九月三日是什么日子(每年九月三日是什么日子)
  • 2024-07-05每年九月三日是什么日子9月3日是中国抗日战争胜利纪念日暨世界反法西斯战争胜利纪念日中国人民抗日战争胜利纪念日于2014年2月27日下午十二届全国人大常委会第七次会议经表决通过,将9月3日确定为中国人民抗日战争胜利纪念日19。
  • 昂克赛拉和菲斯塔选哪个好(千金难买你乐意深评LA)
  • 2024-07-05千金难买你乐意深评LA来源:车则写了几周的电车和新能源汽车,这周【车则】换个口味,来一波平价性能车对比,售价区间锁定在15万元左右车型选择上,我选择的是后台呼声最高的两辆车,一辆是去年的性能车黑马——北京现代LAFESTA。
  • 诚哥爱的卑微(日在校园渣的都是诚哥)
  • 2024-07-05日在校园渣的都是诚哥我没有错,都是世界的错这句台词在日漫当中并不少见可以肯定的是,这句台词也不是《SchoolDays》的首发,但因为和剧情的贴合度太高,再加上含有对西园寺世界这个人物的一语双关,这句台词便成为了《S。
  • 关于商丘高铁站建在什么地方(商丘市是河南的高铁第二城)
  • 2024-07-05商丘市是河南的高铁第二城整个河南省大部分城市都适合发展现代的交通枢纽,说到高铁枢纽,除了郑州就是远在豫东的商丘比较有优势了商丘确定的是有京九和徐兰高铁经过,也就是说商丘作为高铁十字是铁板钉钉了,那么商丘能不能在老大郑州的帮助。
  • 肿节石斛的养殖殖方法(关于肿节石斛的养殖殖方法)
  • 2024-07-05关于肿节石斛的养殖殖方法温度它喜高温的环境,这个习性从它的分布范围上也很容易看得出来因而,在二十五至三十五度之间较为适宜另外,它不耐寒,十五度之上对它过冬是比较保险的另外,温差也要注意一下,在十度上下较好光照它喜半阴的环境在。
  • 赵丽颖是怎样一步步成为女神的(古偶小花的逆袭之路)
  • 2024-07-05古偶小花的逆袭之路将将跨过及格线的“迷雾剧场”第三部完结了,大概率很多人觉得它烂尾了,至少没有太多的惊喜和反转,甚至某些程度上打破了侦探小说的定律“凶手必须是一开始就出现的人”这部剧究竟值不值得看?不知道今年“迷雾剧场。