进程和线程能否有一些拟物的比喻?

2020-12-19 12:14:43 +08:00
 abser

比如锁可以理解为现实中的锁。

2556 次点击
所在节点    问与答
27 条回复
ZRS
2020-12-19 12:25:43 +08:00
没有很贴切的比喻,另外我个人认为比喻并不是一个很合理的用来理解概念的手段,对思维能力是一种戕害
dswyzx
2020-12-19 12:28:21 +08:00
进程 1 是钢笔,进程 2 是毛笔。一个钢笔手握住仨钢笔一起写字是多线程,但这个手不能用毛笔
opengps
2020-12-19 12:32:37 +08:00
进程是一个车站,线程是车站提供的多条出入口通道,使用多通道(多线程)需要消耗额外的人力(系统资源)成本去指挥管理

多进程能提高运输总量(负载量),但是多个站只能各自管各自的旅客,当然可以设计一下多个站之间的合作关系(进程间通信)实现负载分流
luzemin
2020-12-19 12:43:09 +08:00
明喻和暗喻是文学描述中精妙的辅助手段,但他们常常掩盖了科学技术的真正光芒。
---《编码:隐匿在计算机软硬件背后的语言》
Cooky
2020-12-19 12:45:39 +08:00
电脑用了这么多年,进程还要比喻?
dalabenba
2020-12-19 13:11:36 +08:00
很多不合理的比喻会影响你对现实的认知。进程是对资源隔离带来的产物,什么是资源,cpu,memory 。隔离怎么理解,程序跑的时候觉得自己是独占资源的。怎么实现的,通过操作系统,保存寄存器上下文来隔离 cpu,通过 mmu 来隔离地址空间,比如 a 进程的 0x100 地址和 b 进程的 0x100 地址可以指向完全不同的物理内存。线程是怎么来的,多核 cpu,为了充分利用资源,就要在多个 cpu 上运行,但是进程间通信开销太大,所以共享了部分资源,比如地址空间。a,b 线程同处一个进程,a 线程的 0x100 地址和 b 线程的 0x100 地址指向同一个物理地址。
dalabenba
2020-12-19 13:20:52 +08:00
还有锁的原因是因为操作的非原子(事务)性,就是有一个状态会影响你代码的结果,你的代码执行了前一半的时候,这个状态被别人修改了,那你后一半的代码根据被修改之后的状态来进行操作,这就造成了不连续,不一致。就需要锁来保证你执行这段时间内状态不被修改
cmostuor
2020-12-19 13:52:52 +08:00
一般举例子或拟物是说给普通人听的 作为这行业的几乎没有要这样解释的
opengps
2020-12-19 14:15:11 +08:00
比喻只是工具,合理使用即可。
不否认楼层里有些大佬提出的避免比喻,我自身就有个负面例子:我识别左右不如别人灵敏,因为我小时候是用了先思考下用哪只手写字才能知道哪个是右的认知弯路。
不过话说回来,计算机在历史上是个出现比较晚的词汇,里面太多自定义的解释,很多名词并非象形出身,所以本身就需要设法简化理解难度,使用例子理解无可厚非。能找到合适的例子对外表达交流是个非常好的沟通状态。

锁这个词很好的描述了锁定唯一的概念,那就用了,打比方无妨。但是“完成端口”这种想破脑袋都猜不透意思的概念就最好不要去找现实中的比喻了,毕竟符合特征的场景太少了。
carlclone
2020-12-19 14:17:52 +08:00
我看了那么多年比喻都没明白,看 ucore 课程的进程部分就明白了,主要看进程控制块的结构,创建进程的过程,创建线程的过程 , 以后再也不会靠比喻学概念了
ipwx
2020-12-19 14:43:21 +08:00
@opengps 不 问题的本质不在于你要用作比解释某个概念。而是当你把来龙去脉说清楚了,不需要解释,你自然就懂了,还会举一反三。作比只会让你以为懂了,其实根本不懂,等遇到比喻不能涵盖的上下文,你就会错了。
yangzhezjgs
2020-12-19 14:47:41 +08:00
https://www.bilibili.com/video/BV1N741177F5
可以看看蒋老师这个课,状态机这个视角可能更容易理解一些
opengps
2020-12-19 14:59:22 +08:00
@ipwx 例子的目的,在于懂的人讲给不懂的人用来加深理解用的。注意我并非反驳例子坏处,只是在强调合理使用例子。
不懂的人需要先看概念,再参考例子去加深理解,而不是先看例子去重新定义概念。
wellsc
2020-12-19 15:00:00 +08:00
不就是资源的具象表达和抽象管理
zhuawadao
2020-12-19 15:36:20 +08:00
每个人都是一个进程,干啥的人(进程)都有,人身上的每个器官都是线程,有的线程(嘴吃饭)可以单独做一件事,有的需要多个线程(两个眼镜都可以看东西)做同一件事,脑子(CPU)反应很快的时候,不同线程可以同时做不同的事,脑子(CPU)反应不过来的时候,比如,嘴巴(线程)打喷嚏的时候,眼镜(线程)就睁不开,那就是线程阻塞了。
oneisall8955
2020-12-19 16:22:05 +08:00
爸爸与孩子们
walsh
2020-12-19 16:37:12 +08:00
隔离程度不一样,线程类似车道,进程类似公路,车道到车道间的切换共享手段极多,公路到公路间的切换共享手段很有限。红绿灯类似信号量,电台类似跨进程信号量,奔溃类似发生交通事故,死锁类似进入一个没有出口不能掉头的死胡同。不过这个比喻也不是很严谨
YYYeung
2020-12-19 21:40:33 +08:00
进程:一只手 👋
线程:上面这只手的五根手指

四舍五入,当用这只手来弹钢琴的时候,可以这样比喻
jzmws
2020-12-19 22:08:46 +08:00
工厂和流水线的区别
ruokw
2020-12-19 22:27:46 +08:00
公司 打工人 哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX