首页> 其他随笔

对进程、线程和协程的理解以及它们的区别

发布时间:2022-05-30 07:37 已围观:2505

摘要对进程、线程和协程的理解以及它们的区别

一、进程

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

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

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

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

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

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

image-20220425233252807

(图1:进程资源)

  • 内存管理相关

  • 文件系统

  • 调度相关

  • 信号处理

  • 内核栈

  • 进程各种状态

  • 进程运行时统计信息

  • 进程标识

等等。

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

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

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

image-20220425183626070

(图2:多进程简图)

二、线程

2.1 什么是线程?

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

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

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

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

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

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

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

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

image-20220425204853673

(图3:进程里的线程)

2.2 为什么会有多线程?

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

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

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

还有一个原因是:

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

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

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

多线程的缺点:

  1. 对于多线程来说,进程中的资源是共享的,所以会产生资源竞争。

  2. 当进程中的一个线程崩溃了,会导致这个进程里的其他线程也崩溃。所以有时多进程程序更好,一个进程崩溃不会导致其他进程也崩溃。

三、进程与线程区别

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

进程与进程之间关系:

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

线程与进程关系:

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

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

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

image-20220425233616408

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

四、协程

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

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

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

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

协程的优点:

  1. 协程栈很小,只有几KB,而线程栈是 1 M,对比起来,创建大量协程需要的内存更少。

  2. 协程的调度是语言提供的 runtime 来调度,是在用户空间直接调度,不需要在内核空间和用户空间来回切换,浪费效率。

  3. 能更好的利用 cpu 的多核,提高程序执行性能。

  4. 避免阻塞,如果协程所在的线程发生了阻塞,那么协程调度器可以把运行在阻塞线程上的协程,调度到其它没有发生阻塞的线程上,继续运行。

五:协程与线程区别

  1. 协程是运行在线程之上,一个线程可以有多个协程。就像一个进程里可以有多个线程一样。

  2. 协程能更好的控制利用多核机制。比如 Go 协程可以控制运行在多少个 CPU 的核上。

  3. 协程是在用户空间完成调度,由语言提供的 runtime 进行调度完全用户态。线程由内核调度。

  4. 协程使用内存更小。

六:Golang 中协程与线程关系

Go 中的协程相当于一个”微线程“,由 Go runtime 调度使用。它的调度模型是一个 GMP 模型,对于 Go 调度的基本了解可以看 这里还有这里

简单介绍下 GMP :

G:goroutine,表示 go 的一个协程,也就是”微线程“。

M:machine,表示线程,G 在 M 上运行。

P:processor,它包含了运行 goroutine 所需资源。如果一个 M 想运行一个 goroutine,那么先要获取 processor。

Go 中 goroutine 和线程关系?

goroutine 协程都是运行在线程上的。

GMP 与线程关系简图:

image-20220501152525407

(图5:协程、线程关系简图)

七、几点思考

它是一个缓慢发展的过程。重要的技术进步,并不是 1 年,2 年内就能完成的,而是要发展多年才慢慢完成,到能工程使用。

是技术本身发展很快吗?
重要的 IT 技术发展其实没有多快。单位都是以年计量。

是技术应用发展快吗?
也没有,要么从线下搬到了线上,本质还是没变,IT 技术使资源分配效率加快。但 IT 技术并没有改变事情的本质。

我说个原因:可能是年龄大了后,花在 IT 技术上的时间慢慢变少了。大了后,事情变多了,刚毕业时事情少,最重要的就是工作。
后面,成家了,家里的事情会分掉你的一部分时间和精力。
老人年纪大了,也需要你照料,以前是他们照顾你,让你专心上学和工作。

年龄慢慢变大后,可能那种 “stay hungry” 的心也在渐渐消退,追新 IT 技术,学新知识意愿减退。

另外,虽然技术进步不是很快,但是还是会进步,你不跟上技术进步的步伐,就可能会落伍。

最后,行业也会变化,也可能是一部分原因。比如现在互联网教育行业的变化。

其他原因留给读者思考,评论。 当然,更欢迎大家点推荐!

八、参考

== just do it ==

声明:本文内容摘自网络,版权归原作者所有。如有侵权,请联系处理,谢谢~
转发:九卷--https://www.cnblogs.com/jiujuan/p/16193142.html

赞一个 (282)


上一篇: 服务治理:常用限流算法总结

下一篇: WebSocket 协议详解

点击排行

VMware安装MacOS遇到“客户机操作系统已禁用 CPU。请关闭或重置虚拟机。”解决方案 VMware安装MacOS遇到“客户机操作系统已禁用 CPU。请关闭或重置虚拟机。”解决方案

推荐文章

巧用 background-clip 实现超强的文字动效 巧用 background-clip 实现超强的文字动效

标签云

相关内容推荐

魅族社区手机电影下载网站品书下载网站mp3剪切大师安标末日家园天气插件最后的希望死神大战火影9momo智力游戏高州论坛收手机自由桌面金庸无双2梦回战场豆瓣电台邯郸职业技术学院考试资料网80sgps定位仪中国汽车人才网2345网址瑞丽家居设计大战僵尸23454小游戏泡泡球折扣cpu测试软件连城读书三国之我主沉浮软件站迷图上海市人才网googo手机游戏网站成都日报我的世界pe游戏厅捕鱼急速赛车金宝贝早教中心找砂网电馿长沙论坛口袋宠物光荣使命民用版江西省公安厅书香电子书魔王迷宫迈康侠客世界保险商城360游戏平台博士的家2旅游电子地图草狐苏星启航教育乖宝宝天下鸽问蝴蝶版乐游义乌购56网免费手机铃声未选之路压缩软件弹跳球会计记账软件豆果美食股市软件大战舰和平精英变声器我的小马驹破解软件下载愤怒的小鸟捣蛋猪学习软件装修师傅台州哈狗爸爸网3e红色警戒3bml人人影视医学考研试题宠物专家飞牛网填色小游戏快游加速器一起吧googele记事本软件战机世界官网啊里妈妈买车计算器汉译英在线翻译风云足球环球手机网手机应用程序淘宝网天猫万达电影票团购南国今报手机邮箱139动画视频下载警方110明星大乱斗易播南国今报宇宙沙盘2图文设计买车计算器在线英文翻译器中国人才热线会计学习软件模拟游戏下载照片合成永恒之塔多玩网上订鲜花文档在线汉中社保jbl官网7373免费看动画片字体转化快播盒子实况8国际版cf魔盒成都导游光大证券下载和讯论坛淘宝安卓手机铃声44399小游戏友友91助手官网手机软件大全仙网战极姬北斗神拳下载苏通快运视聊福建海峡人才网轻轻松松背单词软件抢车位游戏油卡充值证券时报总裁的亿万小小妻天津社保康联无名英雄2国航知音税友汽摩配pdf阅览器泡泡手机中国农机超级越野车同花顺软件下载北京医院挂号侠客行下载龙视安gba下载翻唱学易网校微信斗地主米折网返利今日十大热点新闻国家税务视频剪切合并大师360电视直播搜狗游戏中心外语人才网幻龙骑士云博风暴影音booster希赛教育安卓游戏排行feixin装修软件密码查看安卓网游华夏春秋fiio谷歌翻译工具单词锁屏神庙逃亡魔境仙踪英雄无敌下载招商银行网银医院大亨网上二手手机市场酷空间元贝驾考科目四铁甲二手工程机械淘宝精选醉美人ps5下载天地道

合作伙伴

冲顶技术团队

www.mtcddc.cn
www.clhczx.cn
zz.urkeji.com
www.3phw.com
www.lpjfm.cn
www.clhczx.cn
www.zhdaili.cn
www.xtcwl.com
dw.urkeji.com
www.lpjfm.cn
www.clhczx.cn
www.hz.bj.cn
qiansan.seo5951.com
kuai.urkeji.com
www.he1tech.com
www.clhczx.cn
www.clhczx.cn
www.28j.com.cn
www.weiwin.cc
seo.china185.com