Redis为什么这么快&高性能设计之epoll和IO多路复用深度解析
一、before
-
多路复用要解决的问题
-
结论
二、IO多路复用模型
2.1 是什么
- IO:网络IO
- 多路:多个客户端连接(连接就是套接字描述符,即socket或者channel),指的是多条TCP连接
- 复用:用一个进程来处理多条连接,使用单进程就能够实现同时处理多个客户端的连接
- 总结:
- 实现了用一个进程来处理大量的用户连接
- IO多路复用类似一个规范和接口,落地实现可以分 select -> poll -> epoll 三个阶段来描述
2.2 Redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快
2.3 参考《Redis设计与实现》
总结:
2.4 同步&异步&阻塞&非阻塞
案例:
-
同步
调用者要一直等待调用结果的通知后才能进行后续的执行,现在就要,我可以等,等出结果为止。
-
异步
指被调用方先返回答应,让调用者先回去,然后再计算调用结果,计算完最终结果后再通知并返回给调用方
异步调用要想获得结果一般通过回调
-
同步与异步
同步、异步的讨论对象是被调用者(服务提供者),重点在于获得调用结果的消息通知方式上
-
阻塞
调用方一直在等待而且不能做别的任何事情,当前进程或线程会被挂起
-
非阻塞
调用在发出后,调用方先去忙别的事情,不会阻塞当前进程或线程,而是立即返回
-
阻塞与非阻塞
阻塞、非阻塞的讨论对象是调用者(服务请求者),重点在于等消息时候的行文,调用者能够干其他事情
-
总结
- 同步阻塞:服务员说快到你了,先别离开,我后台看一眼,马上通知你。客户在海底捞火锅前台干等着,啥都不干。
- 同步非阻塞:服务员说快到你了,先别离开。客户在海底捞火锅前台边刷抖音边等着叫号。
- 异步阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。客户怕过号,在海底捞火锅前台拿着排号小票等着,啥也不干,一直等着店员通知。
- 异步非阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。客户拿着小票排队,一边刷着抖音,等着店员通知。
2.5 Unix网络编程中的五种IO模型
Blocking IO
:阻塞IO
NoneBlocking IO
:非阻塞IO
IO multiplexing
:IO
多路复用signaldriven IO
:信号驱动IO
asynchrous IO
:异步IO
2.6 Java验证
-
BIO
-
NIO
2.7 IO多路复用详情
-
是什么
-
能干嘛
reactor设计模式
每一个网络连接其实都对应一个文件描述符
-
select、poll、epoll 都是IO多路复用的具体实现
select
优点:
缺点:
poll
epoll
总结:
-
5中IO模型总结