1
yuelang85 2013-02-04 22:46:10 +08:00 1
其他的不知道,《MUD游戏编程》一书的前几章关于这里的介绍觉得挺不错的。如果楼主能等半个小时左右,这里可以下到:
http://la-onger.long-er.name/files/Books/programming/Game/ |
2
ayang23 2013-02-04 22:57:46 +08:00 1
UNIX网络编程 http://book.douban.com/subject/1500149/
前几天同样不明白这个问题查到的问题的最根源的答案,不过这本书我没看,只是看到别人的答案都是从这里来的。 |
3
wang2191195 2013-02-05 00:05:21 +08:00 via iPhone
楼上+1
|
4
fofoone 2013-02-05 00:47:14 +08:00
同步就是你追一个姑娘,晚上给她发我爱你,她一直没有搭理你,你就一直等,一直等,一直等,一直等,直到姑娘终于答复了你,我也爱你,于是你们在一起了;异步就是你追一个姑娘,晚上给她发我爱你,没等她搭理你,你就又给另一个姑娘发我爱你,没等她搭理你,你就又给第三个姑娘发我爱你,姑娘一、姑娘二、姑娘三都以为你是专心致志的对自己,最后可能有的答复了我爱你,有的答复了对不起
http://elya.cc/2012/01/18/technique-useful/ 这个应该算通俗点 |
5
sodapanda OP |
6
for4 2013-02-05 01:37:18 +08:00
人生苦短 学golang吧
|
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 |
8
darklowly 2013-02-05 02:15:15 +08:00 via iPhone 1
@qq286735628 你搞错了
|
10
qq286735628 2013-02-05 02:25:25 +08:00
@darklowly (ㄒoㄒ)//
刚才看了一下前面几个人的答案,你们都是在拿网络做例子说... 话说我还是觉得,同步异步就是个时间上的调度管理,阻塞非阻塞是个空间上的调度管理... 本质还是计算机一个时刻只能做一件事,一个地方只能放一个东西... 明天再来看答案,先睡觉(~﹃~)~zZ |
11
darklowly 2013-02-05 02:31:18 +08:00 via iPhone
@qq286735628 你又继续错了
|
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的威力。 |
13
zhouhua97 2013-02-05 07:51:49 +08:00
一看以为是说硬件电路的概念,一直搞FGPA,这些东西倒是数字电路里面的基本概念来着。
|
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 继续关注此话题,貌似挺有意思。 |
15
zava 2013-02-05 11:24:00 +08:00 1
楼主可以看下我的这篇博客:http://www.zavakid.com/2011/07/30/unix-io-model/
|
16
microget 2013-02-05 11:39:03 +08:00
|
17
crossmaya 2013-02-05 11:51:37 +08:00
mark 迫切需要了解网络编程知识。
|
18
leavic 2013-02-05 16:04:52 +08:00
做应用的程序员需要对任务调度、资源互斥这些东西有基本概念
|
19
sodapanda OP 谢谢各位,这个基本概念我去读 unix网络编程 来解决。
|
21
darklowly 2013-02-05 21:16:37 +08:00
@qq286735628 坐观你继续以点盖面。
|
22
qq286735628 2013-02-05 22:57:40 +08:00
@darklowly 等你讲解呀...
|
23
darklowly 2013-02-07 23:35:07 +08:00 via iPhone
@qq286735628 翻我之前的回复。好像讲过
|
24
tioover 2013-02-09 12:22:49 +08:00
泡面的例子
同步就是烧水的时候什么都不做,等水烧开再继续 异步就是烧水的时候你可以拆包装,拿碗,倒调料面饼…… |