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

2013-02-04 22:33:11 +08:00
 sodapanda
经常看到这些术语,似懂非懂的。知道个大概但是说不清。哪些书能比较系统的从概念和实践上都介绍一下的?
5757 次点击
所在节点    程序员
24 条回复
yuelang85
2013-02-04 22:46:10 +08:00
其他的不知道,《MUD游戏编程》一书的前几章关于这里的介绍觉得挺不错的。如果楼主能等半个小时左右,这里可以下到:

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


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


@ayang23 大部头~有机会慢慢看~
for4
2013-02-05 01:37:18 +08:00
人生苦短 学golang吧
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
2013-02-05 02:15:15 +08:00
@qq286735628 你搞错了
notedit
2013-02-05 02:20:02 +08:00
@for4 golang只是用同步的概念实现了异步 底层的东西还是那些
qq286735628
2013-02-05 02:25:25 +08:00
@darklowly (ㄒoㄒ)//
刚才看了一下前面几个人的答案,你们都是在拿网络做例子说...
话说我还是觉得,同步异步就是个时间上的调度管理,阻塞非阻塞是个空间上的调度管理...
本质还是计算机一个时刻只能做一件事,一个地方只能放一个东西...

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

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

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

特别提一下GHC新的IOManager允许程序使用同步阻塞的方式达到异步非阻塞的效果,显示了Haskell的威力。
zhouhua97
2013-02-05 07:51:49 +08:00
一看以为是说硬件电路的概念,一直搞FGPA,这些东西倒是数字电路里面的基本概念来着。
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
2013-02-05 11:24:00 +08:00
楼主可以看下我的这篇博客:http://www.zavakid.com/2011/07/30/unix-io-model/
microget
2013-02-05 11:39:03 +08:00
crossmaya
2013-02-05 11:51:37 +08:00
mark 迫切需要了解网络编程知识。
leavic
2013-02-05 16:04:52 +08:00
做应用的程序员需要对任务调度、资源互斥这些东西有基本概念
sodapanda
2013-02-05 20:03:08 +08:00
谢谢各位,这个基本概念我去读 unix网络编程 来解决。
darklowly
2013-02-05 21:15:46 +08:00
@qsun 不新吧?几十年了。

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

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

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

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

© 2021 V2EX