十五、Redis——网络模型

文章详细介绍了不同网络IO模型,包括阻塞IO、非阻塞IO、IO多路复用(select、poll、epoll)以及信号驱动IO和异步IO。重点讨论了epoll在处理大量文件描述符(FD)时的高效性,如红黑树的使用和epoll_ctl、epoll_wait的优化。此外,还提到了Redis的网络模型。
摘要由CSDN通过智能技术生成

目录

1.1 用户空间和内核态空间

1.2 网络模型-阻塞IO

1.3 网络模型-非阻塞IO

1.4 网络模型-IO多路复用

总结:

​编辑 

1.5 网络模型-信号驱动IO

1.6 网络模型-异步IO

 

1.7 同步和异步划分

1.8 Redis网络模型


1.1 用户空间和内核态空间

1.2 网络模型-阻塞IO

在《UNIX网络编程》一书中,总结归纳了5种IO模型:

  • 阻塞IO(Blocking IO)
  • 非阻塞IO(Nonblocking IO)
  • IO多路复用(IO Multiplexing)
  • 信号驱动IO(Signal Driven IO)
  • 异步IO(Asynchronous IO)

用程序想要去读取数据,他是无法直接去读取磁盘数据的,他需要先到内核里边去等待内核操作硬件拿到数据,这个过程就是1,是需要等待的,等到内核从磁盘上把数据加载出来之后,再把这个数据写给用户的缓存区,这个过程是2,如果是阻塞IO,那么整个过程中,用户从发起读请求开始,一直到读取到数据,都是一个阻塞状态。

1.3 网络模型-非阻塞IO

1.4 网络模型-IO多路复用

 

 

 

总结:

select模式存在的三个问题:

l 能监听的 FD 最大不超过 1024
l 每次 select 都需要把所有要监听的 FD 都拷贝到内核空间
l 每次都要遍历所有 FD 来判断就绪状态

poll模式的问题:

l poll 利用链表解决了 select 中监听 FD 上限的问题,但依然要遍历所有 FD ,如果监听较多,性能会下降

epoll模式中如何解决这些问题的?

ü 基于 epoll 实例中的红黑树保存要监听的 FD ,理论上无上限,而且增删改查效率都非常高
ü 每个 FD 只需要执行一次 epoll_ctl 添加到红黑树,以后每次 epol_wait 无需传递任何参数,无需重复拷贝 FD 到内核空间
ü 利用 ep_poll_callback 机制来监听 FD 状态,无需遍历所有 FD ,因此性能不会随监听的 FD 数量增多而下降

 

1.5 网络模型-信号驱动IO

 

1.6 网络模型-异步IO

1.7 同步和异步划分

1.8 Redis网络模型

 

 参考文献:

黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目_哔哩哔哩_bilibili

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值