IO多路复用---select详细说明及其编程实现
发布时间
阅读量:
阅读量
IO多路复用机制解析
服务器端编程过程中,构建高效的IO模型是一项常见需求,目前存在四种典型的IO模型:
(1)同步阻塞IO(Blocking IO):即传统意义上的IO实现方式。
eg.用户线程通过调用系统函数read来触发IO读取操作,数据从用户空间切换至内核空间。在数据包抵达后,内核将接收到的数据复制回用户空间,从而完成read操作。
(2)同步非阻塞IO(Non-blocking IO):默认情况下创建的socket均为阻塞模式,而该模型要求将socket配置为非阻塞状态。需注意此处提到的NIO并非Java语言中所指的NIO(New IO)库。
eg.由于socket处于非阻塞状态,当用户线程发起IO请求时会立刻返回响应。然而此时并未获取到任何数据内容,因此需要持续地重复发起IO请求操作,直至数据到达后才能真正读取并继续执行后续流程。
(3)IO多路复用(IO Multiplexing):该模式对应于经典的Reactor设计思想,在某些场景下也被称作异步阻塞IO模式。Java中的Selector以及Linux系统中的epoll均属于此类模型。
eg.用户首先将需要进行输入输出操作的socket注册到select接口中,随后进入等待状态以接收select系统调用的结果返回。当有数据到达时对应的socket会被激活,并由select函数返回
全部评论 (0)
还没有任何评论哟~
