异步,同步,阻塞,非阻塞这些概念不太懂,哪些书能系统的介绍下? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sodapanda
V2EX    程序员

异步,同步,阻塞,非阻塞这些概念不太懂,哪些书能系统的介绍下?

  •  
  •   sodapanda div style="vertical-align: text-bottom; width: 14px; height: 14px; display: inline-block; background-image: url('/static/img/social_github.png'); background-size: 14px 14px; margin-right: 5px;">
    sodapanda 2013-02-04 22:33:11 +08:00 6115 次点击
    这是一个创建于 4641 天前的主题,其中的信息可能已经有所发展或是发生改变。
    经常看到这些术语,似懂非懂的。知道个大概但是说不清。哪些书能比较系统的从概念和实践上都介绍一下的?
    24 条回复    1970-01-01 08:00:00 +08:00
    yuelang85
        1
    yuelang85  
       2013-02-04 22:46:10 +08:00   1
    其他的不知道,《MUD游戏编程》一书的前几章关于这里的介绍觉得挺不错的。如果楼主能等半个小时左右,这里可以下到:

    http://la-onger.long-er.name/files/Books/programming/Game/
    ayang23
        2
    ayang23  
       2013-02-04 22:57:46 +08:00   1
    UNIX网络编程 http://book.douban.com/subject/1500149/
    前几天同样不明白这个问题查到的问题的最根源的答案,不过这本书我没看,只是看到别人的答案都是从这里来的。
    wang2191195
        3
    wang2191195  
       2013-02-05 00:05:21 +08:00 via iPhone
    楼上+1
    fofoone
        4
    fofoone  
       2013-02-05 00:47:14 +08:00
    同步就是你追一个姑娘,晚上给她发我爱你,她一直没有搭理你,你就一直等,一直等,一直等,一直等,直到姑娘终于答复了你,我也爱你,于是你们在一起了;异步就是你追一个姑娘,晚上给她发我爱你,没等她搭理你,你就又给另一个姑娘发我爱你,没等她搭理你,你就又给第三个姑娘发我爱你,姑娘一、姑娘二、姑娘三都以为你是专心致志的对自己,最后可能有的答复了我爱你,有的答复了对不起
    http://elya.cc/2012/01/18/technique-useful/
    这个应该算通俗点
    sodapanda
        5
    sodapanda  
    OP
       2013-02-05 01:04:44 +08:00
    @yuelang85 已经下载了,看一下前六章内容好棒。


    @fofoone 好通俗,看懂了这个,以前用 XMPP 协议写东西的时候用到过这两种。


    @ayang23 大部头~有机会慢慢看~
    for4
        6
    for4  
    &bsp;  2013-02-05 01:37:18 +08:00
    人生苦短 学golang吧
    qq286735628
        7
    qq286735628  
       2013-02-05 02:02:44 +08:00
    这些都离不开一个背景,当年的电脑只有一颗CPU,同一时刻只能执行一条指令。

    假如一段程序A,需要10分钟才能完成,一段程序B,需要5分钟才能完成。
    如果是同步,那等B执行完,最糟糕的情况是15分钟,最好的情况是5分钟。
    如果是异步,CPU会在这一个时钟周期执行A,下一个时钟周期执行B,如此轮询下去。所以异步时候完成B的时间介于5~15分钟。

    假如一段程序C和一段程序D,都是对同一个内存地址的值进行自加。
    在非阻塞的情况下,C给该值+1了,D没等C把结果放回的时候,也给该值+1了,那么,这时候该值只+1。
    在阻塞的情况下,C给地址+1后,因为是阻塞,所以D必须等C把新值放回该地址后,才能对新值进行+1,所以结果是+2
    darklowly
        8
    darklowly  
       2013-02-05 02:15:15 +08:00 via iPhone   1
    @qq286735628 你搞错了
    notedit
        9
    notedit  
       2013-02-05 02:20:02 +08:00
    @for4 golang只是用同步的概念实现了异步 底层的东西还是那些
    qq286735628
        10
    qq286735628  
       2013-02-05 02:25:25 +08:00
    @darklowly (ㄒoㄒ)//
    刚才看了一下前面几个人的答案,你们都是在拿网络做例子说...
    话说我还是觉得,同步异步就是个时间上的调度管理,阻塞非阻塞是个空间上的调度管理...
    本质还是计算机一个时刻只能做一件事,一个地方只能放一个东西...

    明天再来看答案,先睡觉(~~)~zZ
    darklowly
        11
    darklowly  
       2013-02-05 02:31:18 +08:00 via iPhone
    @qq286735628 你又继续错了
    qsun
        12
    qsun  
       2013-02-05 05:29:08 +08:00   1
    异步非阻塞主要是为了解决一个叫做c10k的问题。因为这个东西还是比较新的,成书的资料不多。最重要的被引用做多的是这一篇文章。
    http://www.kegel.com/c10k.html

    nodejs/c(libevent,libev)/ruby(em)使用的就是这种模式。同时,nginx/varnish等服务器也都是使用了异步非阻塞达到了很高的速度。

    常规语言如果使用异步非阻塞会使得开发工作相对复杂,很多callback揉在一起,所以erlang/go/clojure之类的就像当占有优势。

    特别提一下GHC新的IOManager允许程序使用同步阻塞的方式达到异步非阻塞的效果,显示了Haskell的威力。
    zhouhua97
        13
    zhouhua97  
       2013-02-05 07:51:49 +08:00
    一看以为是说硬件电路的概念,一直搞FGPA,这些东西倒是数字电路里面的基本概念来着。
    qq286735628
        14
    qq286735628  
       2013-02-05 10:00:40 +08:00
    @darklowly 好吧,原来说的C10K的问题,你们的同步异步是对CPU等待IO响应做的定义。

    找了一篇12L的中文翻译看了下
    http://www.cnblogs.com/fll/archive/2008/05/17/1201540.html
    继续关注此话题,貌似挺有意思。
    zava
        15
    zava  
       2013-02-05 11:24:00 +08:00   1
    楼主可以看下我的这篇博客:http://www.zavakid.com/2011/07/30/unix-io-model/
    ixo
        16
    ixo  
       2013-02-05 11:39:03 +08:00
    crossmaya
        17
    crossmaya  
       2013-02-05 11:51:37 +08:00
    mark 迫切需要了解网络编程知识。
    leavic
        18
    leavic  
       2013-02-05 16:04:52 +08:00
    做应用的程序员需要对任务调度、资源互斥这些东西有基本概念
    sodapanda
        19
    sodapanda  
    OP
       2013-02-05 20:03:08 +08:00
    谢谢各位,这个基本概念我去读 unix网络编程 来解决。
    darklowly
        20
    darklowly/a>  
       2013-02-05 21:15:46 +08:00
    @qsun 不新吧?几十年了。
    darklowly
        21
    darklowly  
       2013-02-05 21:16:37 +08:00
    @qq286735628 坐观你继续以点盖面。
    qq286735628
        22
    qq286735628  
       2013-02-05 22:57:40 +08:00
    @darklowly 等你讲解呀...
    darklowly
        23
    darklowly  
       2013-02-07 23:35:07 +08:00 via iPhone
    @qq286735628 翻我之前的回复。好像讲过
    tioover
        24
    tioover  
       2013-02-09 12:22:49 +08:00
    泡面的例子
    同步就是烧水的时候什么都不做,等水烧开再继续
    异步就是烧水的时候你可以拆包装,拿碗,倒调料面饼……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5454 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 08:51 PVG 16:51 LAX 01:51 JFK 04:51
    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