30张图看懂线程和进程(图示进程线程绿色线程的神秘面纱)

Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注

用户角度

打开电脑后,就可以同时使用多个应用程序。可以一边上网,一边听音乐,一边微信聊天,一边用vscode写代码。

30张图看懂线程和进程(图示进程线程绿色线程的神秘面纱)(1)

操作系统角度

对于操作系统来说,它需要做的事情就是如何管理这些应用程序。用什么去管理呢?首先需要把这些应用程序抽象出来,叫做什么呢,就叫做进程吧。

有些App运行起来,可能仅仅需要一个进程去维护应用的状态,而有些则需要多个进程。

例如一个浏览器,某个进程负责渲染页面,某个进程负责播放音乐。像浏览器这种软件,可以打开多个窗口,每个窗口都有独立的进程去维护。

30张图看懂线程和进程(图示进程线程绿色线程的神秘面纱)(2)

进程有什么特点呢?

每个进程都有自己的私密小花园,这片内存空间,只有进程自己能够访问,其他进程都是不能访问的。

那么进程之间怎么交流呢?进程之间交流用的是IPC,这个暂且不表。

30张图看懂线程和进程(图示进程线程绿色线程的神秘面纱)(3)

线程有是什么呢?和进程有啥区别?

线程位于进程之中,可以理解为进程的孩子。他们都可以到自己家的私密小花园上玩耍。但不能到别的进程的私密小花园中玩耍。

30张图看懂线程和进程(图示进程线程绿色线程的神秘面纱)(4)

线程存在的意义?

如果把进程比作父母,线程可以比作孩子。有一项任务,去花园里除草。你只有一个孩子,那么完成除草这个任务如果需要30分钟的话。如果你有三个孩子,三个孩子一起去除草,大约只需要10分钟就能完成花园除草。

所以:多线程可以提高工作效率。 但是强招必自损,多线程自然也有多线程的缺点。

涛声依旧注:线程太多会造成线程频繁切换和创建等开销。

30张图看懂线程和进程(图示进程线程绿色线程的神秘面纱)(5)

绿色线程:亲生的孩子

如果把线程分为两类,那么前面讲的线程,可以说是进程领养的孩子。这些孩子都需要向操作系统去申请领养。但是绿色线程就不同了,这是进程亲生的。本质上说:绿色线程实际上是一种模拟的线程

1. 不是所有操作系统都能提供多线程的服务,如果上层想使用多线程,那么只能自己模拟。

2. 绿色线程因为是模拟线程,也有很明显的优点,例如易于创建和销毁。你跟你老婆想要个二胎,那是很容易的。但是如果你想去领养一个孩子,那么自然是需要向相关政府部门填写一些申请之类的文件。这个自然是效率要比自己生第一点。在编程语言中 Go, Haskell or Rust使用的就是绿色线程。

30张图看懂线程和进程(图示进程线程绿色线程的神秘面纱)(6)

孩子太多的烦恼

家里有一个孩子,父母如果给孩子买了一件新衣服,那么自然是不需要争抢的。如果有多个小孩,那就必须要解决:新衣服给谁穿的难题? 这个问题自古以来就是难以解决,一般都是长子继承制,但是也有一些小儿子不服气,最后闹个家破人亡的局面。

资源:新衣服

使用者:大儿子,二儿子,小女儿

可能结果:

1. 大儿子、二儿子,小女儿为了争抢衣服,大打出手,最终一不小心,衣服给撕烂了,谁也穿不上

2. 大儿子穿了

3. 二儿子穿了

4. 小女儿穿了

这个在编程语言中可以表示为:

var a // 线程1 a = 1 // 线程2 a = 2 // 线程3 a = 3 // 线程4 并不去对变量a进行写操作,而是要去读取a的值,那么a的值是什么呢? a ?

原文:https://mp.weixin.qq.com/s/uTd86WsHQZJSnll5Plt_4w

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页