IO模型及多路复用IO(select、poll、epoll)

本文详细介绍了IO模型的四种类型:同步阻塞、同步非阻塞、IO多路复用(select、poll、epoll)和异步IO。解释了同步与异步、阻塞与非阻塞的区别,并通过伪代码展示了不同模型的工作流程。重点讨论了IO多路复用的优势,如避免轮询等待,允许单线程处理多个IO请求,提高服务器吞吐能力。最后给出了select函数的简单示例。
摘要由CSDN通过智能技术生成

4中IO模型
同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。
阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。
常见的IO模型有四种:
(1)同步阻塞IO(Blocking IO):即传统的IO模型。(用户线程在内核进行IO操作时被阻塞);
伪码如下:{
read(socket, buffer);
process(buffer);
}

如下图:用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作。
这里写图片描述

(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。
伪码如下:
{
while(read(socket, buffer) != SUCCESS);
process(buffer);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值