并发编程和异步编程的区别 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
seekseat
V2EX    编程

并发编程和异步编程的区别

  •  
  •   seekseat 2024-07-10 18:18:53 +08:00 2416 次点击
    这是一个创建于 509 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了很多资料,但感觉二者直观的区别和联系都没有讲的很清楚。各位大佬们如何理解并发和异步的?

    比如以 Go 为例, channel,select,goroutine,这几个内置的特性,和并发/异步似乎都有关联。

    14 条回复    2024-07-11 08:54:02 +08:00
    kujio
        1
    kujio  
       2024-07-10 19:48:41 +08:00   3
    并发:多个线程同时干同样的事
    异步:多个线程同时干不同的事
    并发解决的是吞吐量的问题
    异步解决的是阻塞问题
    个人浅见
    sagaxu
        2
    sagaxu  
       2024-07-10 20:09:26 +08:00   1
    并发,多个事情在同一个时间段内发生。
    并行,多个事情在同一个时间点内发生。

    同步,一个动作执行后,收到应答/反馈后进行下一个动作。
    异步,一个动作执行后,不等待反馈就进行下一个动作。

    同步阻塞,现在就取资源,没有就一直卡死着等。
    同步非阻塞,外部资源就绪了通知我,我再去取。

    异步非阻塞,我先干别的,资源就绪了给我放那里,我就不去取了。
    异步阻塞,资源来了给我放那儿,我不会主动取,但我现在啥也不干卡死等着。
    Building
        3
    Building  
       2024-07-10 20:17:12 +08:00   1
    从名字就能区别出来吧,这两个也没有什么关系啊
    并发:免费麦辣鸡翅下班时分冲进来一堆薅羊毛的
    异步:顾客点单,把订单交给后台,给下一位顾客点单,听到后台摇铃铛出餐,把食物拿给之前点单的顾客...
    byehair
        4
    byehair  
       2024-07-10 21:03:48 +08:00
    @Building 麦辣鸡翅哈哈哈哈哈哈哈哈有趣
    seekseat
        5
    seekseat  
    OP
       2024-07-10 21:46:49 +08:00
    @kujio 赞!
    seekseat
        6
    seekseat  
    OP
       2024-07-10 21:46:59 +08:00
    @sagaxu 感谢~
    seekseat
        7
    seekseat  
    OP
       2024-07-10 21:47:29 +08:00
    @Building 参考楼上的两位,感觉还是有些关联的
    CLMan
        8
    CLMan  
       2024-07-10 23:06:38 +08:00   1
    简单来讲,大部分程序都是输入-计算-输出的顺序执行流模式:

    - 并发强调:允许逻辑上存在多个执行流同时执行
    - 异步强调:执行流的顺序执行模型被打破了,实际的执行过程可能是:输入->提交计算任务->返回,计算的执行是不确定时间的,即与执行流脱钩

    类似的问题个人认为是少看点比喻,因为它们与实际代码似是而非,反而容易弄混。
    dobelee
        9
    dobelee  
       2024-07-10 23:12:37 +08:00
    举个简单粗暴的日常例子。
    异步:把任务丢给消息队列去执行。
    并行:开多几个消费者让它执行快点。
    moonlight010
        10
    moonlight010  
       2024-07-10 23:23:12 +08:00 via Android
    并发说的是 cpu 执行,也就是进程线程之间的事
    异步,说的是消息机制,是一直等着还是怎么着来通知获取
    ariasigh
        11
    ariasigh  
       2024-07-10 23:23:31 +08:00 via iPhone   1
    异步跟线程无关,单线程也可以异步,非阻塞的操作都是异步操作。

    并发也跟线程无关,可以是多线程,多进程或多机。

    总之,异步跟并发是两个毫无关联的概念,不要搞混了
    ih8es9OIzne0959p
        12
    ih8es9OIzne0959p  
       2024-07-10 23:31:45 +08:00 via Android
    楼上说的对。不是一个层次的
    0o0O0o0O0o
        13
    0o0O0o0O0o  
       2024-07-10 23:38:01 +08:00
    我觉得从 Go 出发学这些概念可能容易混乱,因为 Go 就是围绕它们做了大量的设计,先用别的语言学一下概念,再去看 Go 里的一些设计,也许更好一些
    skuuhui
        14
    skuuhui  
       2024-07-11 08:54:02 +08:00
    两个维度的事情。
    并发是,你有两个快递要拿,一次拿两个就是并发,无论你一手拿一个,还是你和你老婆一起去每人拿一个。
    同步是,菜鸟驿站老板把快递一个一个拿出来等你们取(当然前一个人一直没来拿,他也不会去取下一个)
    异步是,菜鸟驿站老板坐在那里,谁菜鸟裹裹点了一件取货,再去拿给他。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2362 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 15:46 PVG 23:46 LAX 07:46 JFK 10:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86