摘要: 一 了解select,poll,epoll IO复用:为了解释这个名词,首先来理解下复用这个概念,复用也就是共用的意思. 复用在通信领域的使用,在通信领域中为了充分利用网络连接的物理介质, 往往在同一条网络链路上采用时分复用或频分复用的技术使其在同一链路上传输多路信号。 复用的含义: 即公用某个“介 阅读全文
posted @ 2018-12-22 23:29 混世妖精 阅读(346) 评论(0) 推荐(0) 编辑
摘要: IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了。现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪。先回答最简单的这个:blocking vs non-blocking。前 阅读全文
posted @ 2018-12-22 23:28 混世妖精 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 异步IO(Asynchronous I/O) Linux下的asynchronous IO其实用得不多,从内核2.6版本才开始引入。先看一下它的流程: 用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先 阅读全文
posted @ 2018-12-22 23:27 混世妖精 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 多路复用IO(IO multiplexing) IO multiplexing这个词可能有点陌生,但是如果我说select/epoll,大概就都能明白了。有些地方也称这种IO方式为事件驱动IO(event driven IO)。我们都知道,select/epoll的好处就在于单个process就可以 阅读全文
posted @ 2018-12-22 23:24 混世妖精 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 非阻塞IO(non-blocking IO) Linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会bloc 阅读全文
posted @ 2018-12-22 22:34 混世妖精 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network IO来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时 阅读全文
posted @ 2018-12-22 21:21 混世妖精 阅读(1237) 评论(0) 推荐(0) 编辑