V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
abser
V2EX  ›  问与答

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

  •  
  •   abser · 2020-12-19 12:14:43 +08:00 · 2751 次点击
    这是一个创建于 1470 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    四舍五入,当用这只手来弹钢琴的时候,可以这样比喻
    jzmws
        19
    jzmws  
       2020-12-19 22:08:46 +08:00
    工厂和流水线的区别
    ruokw
        20
    ruokw  
       2020-12-19 22:27:46 +08:00 via Android
    公司 打工人 哈哈
    whwq2012
        21
    whwq2012  
       2020-12-19 23:12:08 +08:00 via Android
    不同进程分配的空间独立,同一个进程内的线程可以共享空间。
    感觉就像小组和和小组成员一样。
    hello2060
        22
    hello2060  
       2020-12-20 05:55:01 +08:00 via iPhone
    进程就是党领导人民建立了人民当家作主的新中国这件事。

    线程就是这个过程中的各种小事,有的时间长,有的时间短,有的贯穿始终,他们可能互有联系,可能毫无关系,但对完成中华民族的伟大复兴缺一不可
    mmdsun
        23
    mmdsun  
       2020-12-20 13:19:39 +08:00 via Android
    启动一个软件 Word 叫进程,
    Word 的字数统计是线程。
    kyuuseiryuu
        24
    kyuuseiryuu  
       2020-12-20 20:18:58 +08:00 via iPhone   ❤️ 1
    进程是单个人
    线程是哪吒,三头六臂
    lap510200
        25
    lap510200  
       2020-12-21 09:07:08 +08:00
    一个码农负责一个项目是一个进程 多个人负责多个 但项目可能需求不饱和 他们可能会摸鱼 老板让他们每个人负责多个 他就要在多个项目间切换做事 这样效率提升 老板又可以买套别墅了
    baobao1270
        26
    baobao1270  
       2020-12-21 10:23:41 +08:00 via Android
    我觉得这两个词本身就有比喻了啊
    很多技术名词都是借用了现实中的东西,比如 H
    handle socket

    非要说的话
    线程就是京沪铁路沪宁段和沪宁铁路的关系
    进程就是京沪铁路和京沪高铁的关系
    abser
        27
    abser  
    OP
       2020-12-28 11:50:29 +08:00
    @kyuuseiryuu 那如果线程之间的资源竞争和通信怎么通过三头六臂解释?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:04 · PVG 06:04 · LAX 14:04 · JFK 17:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.