比如锁可以理解为现实中的锁。
1
ZRS 2020-12-19 12:25:43 +08:00 via iPhone 3
没有很贴切的比喻,另外我个人认为比喻并不是一个很合理的用来理解概念的手段,对思维能力是一种戕害
|
2
dswyzx 2020-12-19 12:28:21 +08:00 via iPhone
进程 1 是钢笔,进程 2 是毛笔。一个钢笔手握住仨钢笔一起写字是多线程,但这个手不能用毛笔
|
3
opengps 2020-12-19 12:32:37 +08:00 4
进程是一个车站,线程是车站提供的多条出入口通道,使用多通道(多线程)需要消耗额外的人力(系统资源)成本去指挥管理
多进程能提高运输总量(负载量),但是多个站只能各自管各自的旅客,当然可以设计一下多个站之间的合作关系(进程间通信)实现负载分流 |
4
luzemin 2020-12-19 12:43:09 +08:00 3
明喻和暗喻是文学描述中精妙的辅助手段,但他们常常掩盖了科学技术的真正光芒。
---《编码:隐匿在计算机软硬件背后的语言》 |
5
Cooky 2020-12-19 12:45:39 +08:00
电脑用了这么多年,进程还要比喻?
|
6
dalabenba 2020-12-19 13:11:36 +08:00 via Android
很多不合理的比喻会影响你对现实的认知。进程是对资源隔离带来的产物,什么是资源,cpu,memory 。隔离怎么理解,程序跑的时候觉得自己是独占资源的。怎么实现的,通过操作系统,保存寄存器上下文来隔离 cpu,通过 mmu 来隔离地址空间,比如 a 进程的 0x100 地址和 b 进程的 0x100 地址可以指向完全不同的物理内存。线程是怎么来的,多核 cpu,为了充分利用资源,就要在多个 cpu 上运行,但是进程间通信开销太大,所以共享了部分资源,比如地址空间。a,b 线程同处一个进程,a 线程的 0x100 地址和 b 线程的 0x100 地址指向同一个物理地址。
|
7
dalabenba 2020-12-19 13:20:52 +08:00 via Android 1
还有锁的原因是因为操作的非原子(事务)性,就是有一个状态会影响你代码的结果,你的代码执行了前一半的时候,这个状态被别人修改了,那你后一半的代码根据被修改之后的状态来进行操作,这就造成了不连续,不一致。就需要锁来保证你执行这段时间内状态不被修改
|
8
cmostuor 2020-12-19 13:52:52 +08:00
一般举例子或拟物是说给普通人听的 作为这行业的几乎没有要这样解释的
|
9
opengps 2020-12-19 14:15:11 +08:00 1
比喻只是工具,合理使用即可。
不否认楼层里有些大佬提出的避免比喻,我自身就有个负面例子:我识别左右不如别人灵敏,因为我小时候是用了先思考下用哪只手写字才能知道哪个是右的认知弯路。 不过话说回来,计算机在历史上是个出现比较晚的词汇,里面太多自定义的解释,很多名词并非象形出身,所以本身就需要设法简化理解难度,使用例子理解无可厚非。能找到合适的例子对外表达交流是个非常好的沟通状态。 锁这个词很好的描述了锁定唯一的概念,那就用了,打比方无妨。但是“完成端口”这种想破脑袋都猜不透意思的概念就最好不要去找现实中的比喻了,毕竟符合特征的场景太少了。 |
10
carlclone 2020-12-19 14:17:52 +08:00
我看了那么多年比喻都没明白,看 ucore 课程的进程部分就明白了,主要看进程控制块的结构,创建进程的过程,创建线程的过程 , 以后再也不会靠比喻学概念了
|
11
ipwx 2020-12-19 14:43:21 +08:00
@opengps 不 问题的本质不在于你要用作比解释某个概念。而是当你把来龙去脉说清楚了,不需要解释,你自然就懂了,还会举一反三。作比只会让你以为懂了,其实根本不懂,等遇到比喻不能涵盖的上下文,你就会错了。
|
12
yangzhezjgs 2020-12-19 14:47:41 +08:00
https://www.bilibili.com/video/BV1N741177F5
可以看看蒋老师这个课,状态机这个视角可能更容易理解一些 |
13
opengps 2020-12-19 14:59:22 +08:00 2
@ipwx 例子的目的,在于懂的人讲给不懂的人用来加深理解用的。注意我并非反驳例子坏处,只是在强调合理使用例子。
不懂的人需要先看概念,再参考例子去加深理解,而不是先看例子去重新定义概念。 |
14
wellsc 2020-12-19 15:00:00 +08:00
不就是资源的具象表达和抽象管理
|
15
zhuawadao 2020-12-19 15:36:20 +08:00
每个人都是一个进程,干啥的人(进程)都有,人身上的每个器官都是线程,有的线程(嘴吃饭)可以单独做一件事,有的需要多个线程(两个眼镜都可以看东西)做同一件事,脑子(CPU)反应很快的时候,不同线程可以同时做不同的事,脑子(CPU)反应不过来的时候,比如,嘴巴(线程)打喷嚏的时候,眼镜(线程)就睁不开,那就是线程阻塞了。
|
16
oneisall8955 2020-12-19 16:22:05 +08:00 via Android
爸爸与孩子们
|
17
walsh 2020-12-19 16:37:12 +08:00
隔离程度不一样,线程类似车道,进程类似公路,车道到车道间的切换共享手段极多,公路到公路间的切换共享手段很有限。红绿灯类似信号量,电台类似跨进程信号量,奔溃类似发生交通事故,死锁类似进入一个没有出口不能掉头的死胡同。不过这个比喻也不是很严谨
|
18
YYYeung 2020-12-19 21:40:33 +08:00
进程:一只手 👋
线程:上面这只手的五根手指 四舍五入,当用这只手来弹钢琴的时候,可以这样比喻 |
19
jzmws 2020-12-19 22:08:46 +08:00
工厂和流水线的区别
|
20
ruokw 2020-12-19 22:27:46 +08:00 via Android
公司 打工人 哈哈
|
21
whwq2012 2020-12-19 23:12:08 +08:00 via Android
不同进程分配的空间独立,同一个进程内的线程可以共享空间。
感觉就像小组和和小组成员一样。 |
22
hello2060 2020-12-20 05:55:01 +08:00 via iPhone
进程就是党领导人民建立了人民当家作主的新中国这件事。
线程就是这个过程中的各种小事,有的时间长,有的时间短,有的贯穿始终,他们可能互有联系,可能毫无关系,但对完成中华民族的伟大复兴缺一不可 |
23
mmdsun 2020-12-20 13:19:39 +08:00 via Android
启动一个软件 Word 叫进程,
Word 的字数统计是线程。 |
24
kyuuseiryuu 2020-12-20 20:18:58 +08:00 via iPhone 1
进程是单个人
线程是哪吒,三头六臂 |
25
lap510200 2020-12-21 09:07:08 +08:00
一个码农负责一个项目是一个进程 多个人负责多个 但项目可能需求不饱和 他们可能会摸鱼 老板让他们每个人负责多个 他就要在多个项目间切换做事 这样效率提升 老板又可以买套别墅了
|
26
baobao1270 2020-12-21 10:23:41 +08:00 via Android
我觉得这两个词本身就有比喻了啊
很多技术名词都是借用了现实中的东西,比如 H handle socket 非要说的话 线程就是京沪铁路沪宁段和沪宁铁路的关系 进程就是京沪铁路和京沪高铁的关系 |
27
abser OP @kyuuseiryuu 那如果线程之间的资源竞争和通信怎么通过三头六臂解释?
|