12_Redis为什么这么快&高性能设计之epoll和IO多路复用深度解析

Redis为什么这么快&高性能设计之epoll和IO多路复用深度解析

一、before

  1. 多路复用要解决的问题

    image-20230319154340473

  2. 结论

    image-20230319155309800

二、IO多路复用模型

2.1 是什么

  1. IO:网络IO
  2. 多路:多个客户端连接(连接就是套接字描述符,即socket或者channel),指的是多条TCP连接
  3. 复用:用一个进程来处理多条连接,使用单进程就能够实现同时处理多个客户端的连接
  4. 总结:
    1. 实现了用一个进程来处理大量的用户连接
    2. IO多路复用类似一个规范和接口,落地实现可以分 select -> poll -> epoll 三个阶段来描述

2.2 Redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快

image-20230319160424150

image-20230319160936179

2.3 参考《Redis设计与实现》

image-20230319161121276

image-20230319161139834

总结:

image-20230319161354986

2.4 同步&异步&阻塞&非阻塞

案例:

image-20230319162128236

image-20230319162632728

  1. 同步

    调用者要一直等待调用结果的通知后才能进行后续的执行,现在就要,我可以等,等出结果为止。

  2. 异步

    指被调用方先返回答应,让调用者先回去,然后再计算调用结果,计算完最终结果后再通知并返回给调用方

    异步调用要想获得结果一般通过回调

  3. 同步与异步

    同步、异步的讨论对象是被调用者(服务提供者),重点在于获得调用结果的消息通知方式上

  4. 阻塞

    调用方一直在等待而且不能做别的任何事情,当前进程或线程会被挂起

  5. 非阻塞

    调用在发出后,调用方先去忙别的事情,不会阻塞当前进程或线程,而是立即返回

  6. 阻塞与非阻塞

    阻塞、非阻塞的讨论对象是调用者(服务请求者),重点在于等消息时候的行文,调用者能够干其他事情

  7. 总结

    1. 同步阻塞:服务员说快到你了,先别离开,我后台看一眼,马上通知你。客户在海底捞火锅前台干等着,啥都不干。
    2. 同步非阻塞:服务员说快到你了,先别离开。客户在海底捞火锅前台边刷抖音边等着叫号。
    3. 异步阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。客户怕过号,在海底捞火锅前台拿着排号小票等着,啥也不干,一直等着店员通知。
    4. 异步非阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。客户拿着小票排队,一边刷着抖音,等着店员通知。

2.5 Unix网络编程中的五种IO模型

  1. Blocking IO:阻塞IO
  2. NoneBlocking IO:非阻塞IO
  3. IO multiplexingIO 多路复用
  4. signaldriven IO:信号驱动 IO
  5. asynchrous IO:异步IO

2.6 Java验证

  1. BIO

    image-20230319164621390

    image-20230319164605250

  2. NIO

    image-20230319172246258

    image-20230319172136412

    image-20230319172508820

    image-20230319175040471

    image-20230319175459936

2.7 IO多路复用详情

  1. 是什么

    image-20230319194234968

    image-20230319194309103

    image-20230319194410111

    image-20230319194512676

    image-20230319194647239

    image-20230319194704503

    image-20230319195207905

  2. 能干嘛

    reactor设计模式

    image-20230319195713623

    image-20230319195736393

    image-20230319200029591

    每一个网络连接其实都对应一个文件描述符

    image-20230319200118856

    image-20230319200213305

  3. select、poll、epoll 都是IO多路复用的具体实现

    select

    image-20230319200340722

    优点:

    image-20230319200852164

    缺点:

    image-20230319200935350

    poll

    image-20230319201048673

    epoll

    总结:

    image-20230319204919544

    image-20230319205141500

  4. 5中IO模型总结

    image-20230319205340153

    image-20230319205313669

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值