15、Redis实战:网络模型

目录

1、 1用户空间和内核态空间;

1、 2网络模型-阻塞IO;

1、 3网络模型-非阻塞IO;

1、 4网络模型-IO多路复用;

总结:

编辑

1、 5网络模型-信号驱动IO;

1、 6网络模型-异步IO;

1、 7同步和异步划分;

1、 8Redis网络模型;


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模式的问题:

lpoll 利用链表解决了 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

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: