深入浅出RPC---5、网络IO模型

本文详细介绍了网络IO模型,包括同步阻塞IO(BIO)、同步非阻塞IO(NIO)、IO多路复用(select、poll、epoll)和异步非阻塞IO(AIO)。重点讨论了IO多路复用在高并发场景中的优势,以及在RPC框架中通常选用IO多路复用的原因。同时,对比了阻塞IO和IO多路复用在使用难度和适用场景上的差异。
摘要由CSDN通过智能技术生成

网络IO模型

有哪些网络IO模型

主要包含以下几种:

  • 同步阻塞 IO(BIO)
  • 同步非阻塞 IO(NIO)
  • IO 多路复用
  • 信号驱动IO
  • 异步非阻塞 IO(AIO)
    常用的是同步阻塞 IO 和 IO 多路复用模型。

什么是阻塞IO模型

IO多路复用

IO多路复用的实现主要有select,poll和epoll模式。
文件描述符:
在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。 三者的区别:

selectpoll epoll
操作方式遍历遍历
底层实现bitmap数组
IO效率每次调用都进行线性 遍历,时间复杂度为 O(n)遍历,时间复杂度为 O(n) 每次调用都进行线性 遍历,时间复杂度为 O(n)
最大连接数1024(x86)或 2048(x64)无上限
fd拷贝每次调用select,都 需要把fd集合从用户 态拷贝到内核态每次调用poll,都需 要把fd集合从用户态 拷贝到内核态

基于select的 I/O 复用模型:

在基于select的 I/O 复用模型中,会用到 Select,这个函数也会使进程阻塞,但是和阻塞 I/O 所不同的是这两 个函数可以同时对多个 I/O 操作。而且可以同时对多个读操作,多个写操作的 I/O 函数进行检测,直到有数据 可读或可写时,才真正调用 I/O 操作函数。

select/poll处理流程:

epoll的处理流程:

epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了poll 和select绝大部分问题, 比如:
epoll 是线程安全的。 epoll 不仅告诉你sock组里面的数据,还会告诉你具体哪个sock连接有数据,不用进程 独自轮询查找。

为什么阻塞 IO 和 IO 多路复用最为常用?

在实际的网络 IO 的应用中,需要的是系统内核的支持以及编程语言的支持。现在大多数系统内核都会支持阻 塞 IO、非阻塞 IO 和 IO 多路复用,但像信号驱动 IO、异步 IO,只有高版本的 Linux 系统内核才会支持。

RPC 框架应该采用哪种网络 IO 模型?

  • IO 多路复用应用特点:
    IO 多路复用更适合高并发的场景,可以用较少的进程(线程)处理较多的 socket 的 IO 请求,但使用难度比较高。
  • 阻塞 IO应用特点:
    与 IO 多路复用相比,阻塞 IO 每处理一个 socket 的 IO 请求都会阻塞进程(线程),但使用难度较低。
  • RPC框架应用:
    RPC 调用在大多数的情况下,是一个高并发调用的场景, 在 RPC 框架的实现中,一般会选择 IO 多路复用的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斑马工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值