G_will
2013-04-30 22:56:19 +08:00
看了回帖觉得有必要插一腿:
1. 举例子说这个问题很不好,越说越混乱,因为:a. 比喻只能给我们描述本体和喻体大致的相似,而正是那些细微的差别才是理解这个问题的关键 b. 所有现实中的例子都和计算机世界中有一个本质的差别就是现实中复制物体成本很大,计算机中复制就复制了。 回题,我们说的是计算机的描述 IO 的模型,那我们就以此说好了。
2. 阻塞对应着非阻塞,但同步不对应着异步,异步的更多的意思是会有异步的情况发生但是也有可能是同步的。
3. 阻塞非阻塞、异步同步,这两组概念并非正交,所以这两组词组合出的四种 IO 类型也不是完全的没有交集。
4. 我们在说 IO 模型,指的是一种 IO 情景表现出的情形,我们可以说这个代码是属于某某 IO 模型,但不能说某某 IO 模型一定就是怎么怎么实现的。所以,当我们讨论不同范畴的代码逻辑时,IO 模型是有可能不同的,也许整体程序上是阻塞的,但是其中一个接口请求是非阻塞的。所以,很多讨论 select 和 epoll 是什么模型的时候就会陷入混乱,因为大家说的范畴不一样。